鍍金池/ 問答/C  嵌入式  網(wǎng)絡安全/ 怎樣理解C語言define和typedef的使用?

怎樣理解C語言define和typedef的使用?

/常用數(shù)據(jù)類型定義*/

#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;

根據(jù)上下文理解,我猜測下面兩句意思是這樣的:
typedef unsigned char unit8_t;
#define u8 unit8_t;

上一句是定義了一種unit8_t的新類型,類型其實是unsigned char的別名。
下一句是因為unit8_t太長了書寫麻煩,所以定義了一個宏u8,其實還是調(diào)用的unit8_t。

那么問題來了:
1.按照程序初始化過程
#define u8 unit8_t;
typedef unsigned char unit8_t;

圖中的代碼是先#define后typedef的,是不是搞反了?

2.兩句能不能簡寫成一句?

typedef unsigned char u8

回答
編輯回答
獨特范
  1. 宏定義define對整個文件生效,當然選擇定義在頭部了,它會在整個文件里面對預定義的內(nèi)容進行相應替換,簡單來說,變異的時候并不會檢查u8uint8_t有沒有定義,因為本質(zhì)上來說它們并不算變量。所以,并沒有和typedef unsigned char unit8_t搞反一說。
  2. 兩句能不能合成一句? 答案是可以的,但是這樣定義并不直觀,過于精簡的寫法,有時候也并不是很好。
2018年2月20日 01:25
編輯回答
胭脂淚

實際上,這 2 個語句并沒有任何直接關系。

#define 是宏定義,屬于預處理階段的東東。也就是說在預處理階段,預處理器會把程序中的 u8 全部替換為 uint8_t。
typedef 是類型定義,相當于定義了一個新類型 uint8_t,如果你在代碼中使用了 uint8_t 就必須定義了它。

  1. 總的來說,你只要在使用 u8uint8_t 之前有 typedef unsigned char unit8_t 即可
  2. 你當然可以那樣寫
2017年6月25日 14:37