小心使用typedef带来的陷阱

                                                            20170726 --iRanMan                                                                                          

我们知道在C语言中使用关键词typedef能带来很大的好处,但是有些时候这也会带来一些差错,本文主要讲使用typedef带来的陷阱。

看一个简单的typedef使用实例,如下:

typedef char* PCHAR;   //定义类型char*为PCHAR
int strcmp(const PCHAR, const PCHAR); 

代码中的”const PCHAR”是否等价于”const char*” (一个指向常量char的指针)呢?  

不是。

typedef是用来定义一种类型的新别名,不同于宏,不是简单的字符串替换。所以”const PCHAR”中的const给予了整个指针本身常量性,即形成了指向char的常量指针,”char* const”……是不是好拗口?多思考。

说白了,就是char* 是个整体,const 是针对char*,而不是char,相当于”char* const”

如果想要让”const PCHAR”等价于”const char*”,如下:

typedef const char* PCHAR;
int strcmp(PCHAR,PCHAR);

其实,无论什么时候,只要为指针声明typedef,就应该在最终的typedef名称中加上const,使得该指针本身就是常量。

需要特别注意的是,虽然typedef不影响对象的存储特性,但在语法上它是存储类的关键字,如auto, extern, static和register等,而一条指令中不能同时声明多个存储类关键字,所以typedef static int INT_STATIC是不可行的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章