C++ #定义myptr int*有什么问题?
下面是一小段代码:C++ #定义myptr int*有什么问题?,c++,macros,C++,Macros,下面是一小段代码: #include <iostream> using namespace std; #define myptr int * int main(){ myptr p,q; int c; p = &c; q = &c; c = 2; cout<<c<<endl; cout<<*p<<endl; cout<<*q<<e
#include <iostream>
using namespace std;
#define myptr int *
int main(){
myptr p,q;
int c;
p = &c;
q = &c;
c = 2;
cout<<c<<endl;
cout<<*p<<endl;
cout<<*q<<endl;
return 0;
}
#包括
使用名称空间std;
#定义myptr int*
int main(){
myptr p,q;
INTC;
p=&c;
q=&c;
c=2;
cout该*
绑定到变量,而不是类型。您需要为行中的每个声明重复它
typedef将按照您期望的方式工作:
typedef int * myptr;
宏替换后,myptr p,q;
变为
int *p,q;
认为q
的类型是int*
,但实际上是int
,这是一个常见的错误
您需要的是typedef
:
typedef int* myptr;
定义只是一个简单的替换宏。如果将myptr
替换为int*
,就像预处理器所做的那样,您将看到为什么q
只是一个int
:
int *p,q;
对于您正在尝试的内容,您需要使用typedef
:
typedef int* myptr;
如果仍然希望使用myptr,可以这样做:
myptr p ;
myptr q ;
但最好使用typedef
#define“几乎”像编辑器中的“查找和替换”,但不能互换。