typedef

Typedef 的缺點

typedef 可能導致大型 C 程式中名稱空間的汙染。

Typedef 結構的缺點

此外,沒有標籤名稱的 typedef’d 結構是不必要的標頭檔案之間的排序關係的主要原因。

考慮:

#ifndef FOO_H
#define FOO_H 1

#define FOO_DEF (0xDEADBABE)

struct bar; /* forward declaration, defined in bar.h*/

struct foo {
    struct bar *bar;
};

#endif

有了這樣的定義,不使用 typedefs,編譯單元可以包含 foo.h 來獲得 FOO_DEF 的定義。如果它不試圖取消引用 foo 結構的 bar 成員,則不需要包含 bar.h 檔案。

Typedef vs #define

#define 是一個 C 前處理器指令,它也用於定義類似於 typedef 的各種資料型別的別名,但有以下區別:

  • typedef 僅限於為型別提供符號名稱,因為 #define 也可用於定義值的別名。

  • typedef 解釋由編譯器執行,而 #define 語句由前處理器處理。

  • 請注意,#define cptr char *後跟 cptr a, b;typedef char *cptr; 不同,後跟 cptr a, b;。使用 #defineb 是一個普通的 char 變數,但它也是 typedef 的指標。