小心使用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是不可行的。

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