#define和typedef在定義指標型別上的優劣
阿新 • • 發佈:2019-02-15
#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