1. 程式人生 > >C語言的#define與關鍵字typedef的三點區別

C語言的#define與關鍵字typedef的三點區別

兩者區別主要在於在三處不同

(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