C 為資料型別定義別名的方式

2021-07-10 13:53:40 字數 1300 閱讀 7208

標籤: 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...