关于typedef和define在程序运行中的作用。
例:
#define a int
typedef int a;
define是展开,纯展开。不是调用。如例,int就像一只悬挂在a上面的一块石头,就随时准备着,你说需要的时候,它就“啪”的一声掉下来,把原本定义的名字砸在下面。展现出原本的自己。别的它不管不问了,融入代码的海洋中了。(所以切记int后面不要加“;”)
而typedef是重定义,比如,将int 重定义一种名字,也可以这样理解,在C语言中,就好像有两个表示整形的关键字了,一个是int,一个是a。(当然我知道这是不允许的)它成为了一种已存在的类型。
一。
在typedef中使用指针往往会带来意外的结果。
如:
typedef string* pstring;
const pstring cstr;
请问cstr变量是什么类型??
简单的回答是const pstring类型的指针。进一步问:const pstring指针所表示的真实类型是什么?
很多人都认为真正的类型是: const string* cstr;
也就是说,const pstring是一种指针,指向的string类型的const对象,但这是错误的。
错误的原因在于将typedef当作文本扩展了。声明const pstring时,const修饰的是pstring类型,这是一个指针。因此,该声明语句应该是把cstr定义为指向string类型对象的const指针,这个定义等价为: string* const cstr;
二。
而define中使用指针。
不赞成用define定义,但是如果遇到了其实也很好解决。
define是在程序预处理过程中就展开的。
#define pstring string*
const pstring cstr;
在读代码的时候,只需要将其展开即可:const string* cstr;
由此cstr为常量指针。