c語言聲明的解讀、typedef與define的區別

讀聲明:數組

1.最早從左往右找到最左邊的標識符。函數

2.查看標識符右邊的下一個符號。如果方括號,則表示到「...的數組」。指針

3.若是是一個左圓括號。到右括號爲止的內容表示「返回...的函數」。變量

4.再往右找,若是左邊的符號是一個左括號, 這個左括號把已處理的部分聲明組合在一塊兒,直到碰見對應的右括號,而後從第二步從新開始。擴展

5.若是是*,表示「指向...的指針」; 若是是const,表示「只讀」; 若是是volatile,表示「volatile」;next

6.剩下的符號可一併閱讀。co

練習例子:char * const *(*next)();閱讀

 

//===================typedef與define的區別=======================//參數

typedef爲現有類型取了一個別名,而沒有引入新類型。typedef能夠當作是一種完全的封裝,不能往裏面再增長別的東西。volatile

typedef看上去以及讀的方式跟變量聲明是同樣的。

typedef在簡潔的表示指向其餘東西的指針方面做用比較大。(如函數指針)

不能把typedef嵌入到聲明中的中間部分。

 

#define是宏文本替換  #define 宏名 宏體  (能夠有帶參數的宏定義如 #define f(a, b) a+b>c)

 

typedef與宏文本的區別:

1.能夠用其餘類型說明符對宏類型名進行擴展。但對typedef所定義的類型名卻不能。

  如:#define peach int                   unsigned peach i;//成立

    #typedef int banana                  unsigned banana i;//不成立

2.在連續幾個變量聲明中,用typedef定義的類型能夠保證聲明中全部的變量是同一類型,用#define定義的類型則沒法保證。

  如:#define peach int *                      peach  i,j;//其中i是int指針而j是int類型。

    #typedef int * banana                      banana i,j; //i,j 都是int指針。

相關文章
相關標籤/搜索