標籤: c++ 定義別名 #define typedef
by 小威威
在c++中,為資料型別定義別名有兩種方式:第一種就是用巨集定義(#define),第二種方法就是用typedef。雖然這兩種方法都能為資料型別定義別名,但是我還是比較推薦使用typedef,尤其是在定義多個變數的時候。
現在我們來看一段簡單的**,你就能很快的明白typedef優於巨集定義的原因。
// 用巨集定義定義別名
# include
# define pointer int*
// typedef int* pointer;
int main(void)
編譯器顯示的錯誤資訊如下:
typedef.cpp: in function 『int main()』:
typedef.cpp:6:7: error: invalid conversion from 『int』 to 『int*』 [-fpermissive]
a = 1;
^
根據編譯器提示的資訊,我們發現在該程式中,a是指標,不能正常賦值,而b是int型別,可以正常賦值。說明用巨集定義的替換相當於下面的語句:
int
*a, b;
即是定義a為指向int型別的指標,而b為int型別的變數。
// 用typedef定義別名
# include
typedef
int* pointer;
int main(void)
編譯器顯示的錯誤資訊:
typedef.cpp: in function 『int main()』:
typedef.cpp:6:7: error: invalid conversion from 『int』 to 『pointer 』 [-fpermissive]
a = 1;
^typedef.cpp:7:7: error: invalid conversion from 『int』 to 『pointer 』 [-fpermissive]
b = 1;
^
根據編譯器提示的資訊,我們發現在該程式中,a、b都為指標,都不能正常賦值。說明編譯器將**轉化為:
int
*a, *b;
經過對比我們發現,巨集定義這種編譯前的替換有一定的侷限性,它只是簡單的進行替換,當變數數量較多時,就會出現類似於上面例子的情況。而typedef很聰明,不會產生這樣的錯誤。
因此,我推薦用typedef為資料型別定義別名。
C 高階資料型別(六) 自定義資料型別
前面我們已經看到過一種使用者 程式設計師 定義的資料型別 結構。除此之外,還有一些其它型別的使用者自定義資料型別 c 允許我們在現有資料型別的基礎上定義我們自己的資料型別。我們將用關鍵字typedef來實現這種定義,它的形式是 typedef existing type new type name ...
C 高階資料型別(六) 自定義資料型別
c 允許我們在現有資料型別的基礎上定義我們自己的資料型別。我們將用關鍵字typedef來實現這種定義,它的形式是 typedef existing type new type name 這裡 existing type 是c 基本資料型別或其它已經被定義了的資料型別,new type name 是我...
C 11定義的資料型別
int,char,short,long,long long,有符號 unsigned char,int short,long c 如何確定常量的型別 例如 cout year 2015 endl 把2015儲存為int,long還是其他型別呢?預設的情況是int.如果有特殊的字尾,比如說 2015l...