#define
和typedef
在定義指針類型上的優劣
先說下結論:typedef更佳。下面看看代碼分析:
typedef char *ptr_to_char;
char c = 'A';
ptr_to_char var = &c;
printf("%c",*var);//A
這句代碼利用了typedef定義了一個新的類型ptr_to_char,並將其定義爲指向字符的指針。在後面可以直接利用此來創建字符指針變量。而#define卻無法很好地駕馭此事:
#define d_ptr_to_char char *
d_ptr_to_char a, b;
int main()
{
char c = 'A';
a = &c;
b = c;
printf("%c",*a);//A
printf("%c",b);//A
return EXIT_SUCCESS;
}
我們知道,#define實際上一個預處理指令。預處理實質上是對代碼進行文字上的修改,其發生要早於編譯。#define會將它所定義的內容做直接替換處理,因此上面的內容也就變成了:
char *a,b;
實際上定義了一個字符指針a和字符b,並沒達到我們期望的效果。此外,根據《Pointers on C》所述,typedef在處理更復雜類型,如函數指針等,會更勝#define一籌。因此在定義指針類型時,應該使用typedef,而非#define