C語言的#define與關鍵字typedef的三點區別
阿新 • • 發佈:2018-12-11
兩者區別主要在於在三處不同
(1)與#define不同,typedef建立的符號名只受限於型別,不能用與值
#define N 10 //將10替換為N,ok
#define M int //將int替換為M,ok
typedef int byte_4; //將int重新命名為byte_4,ok
typedef 4 num; //將4重新命名為num,error
(2)typedef由編譯器解釋,#define由前處理器處理
巨集定義(#define)在預處理階段完成,只是簡單的字串代換。
typede是可以用來做型別說明符的重新命名的,在編譯階段完成的。
typedef char *pStr1;
#define pStr2 char *
pStr1 s1, s2;
pStr2 s3, s4;
在上面的變數定義中,s1、s2、s3都被定義為char *,而s4則定義成了char,不是我們所預期的指標變數。
在visual studio中可以看到下圖的情形,根本原因就在於#define只是簡單的字串替換。
(3)typedef與#define的作用範圍不同
typedef如果定義在函式中,就具有區域性作用域,受限於定義所在的函式。如果定義在函式外面,就具有檔案作用域。
#define可以出現在原始檔的任何地方,其定義從指令出現的地方到該檔案末尾有效。
關於#define的作用域可以檢視 jo-qzy 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/boring_wednesday/article/details/78756696