typeof關鍵字是c語言中的乙個新擴充套件,是對c語言原先32個關鍵字的擴充套件,這一新擴充套件特性在linux的源**中可以經常看到,這一擴充套件是否有在c語言的新標準中,我沒有去驗證,但是據了解,大部分的gnu的c編譯器都支援了這一擴充套件,我在dev c++上也驗證了這一點。下面我們來看看這一擴充套件關鍵字的用法。
typeof的引數可以是兩種形式:表示式或型別。1. 表示式的例子:
typeof (x[0](1))
這裡假設x是乙個函式指標陣列,這樣就可以得到這個函式返回值的型別了。如果將typeof用於表示式,則該表示式不會執行。只會得到該表示式的型別。以下示例宣告了int型別的var變數,因為表示式foo()是int型別的。由於表示式不會被執行,所以不會呼叫foo函式。
extern
int foo();
typeof(foo()) var;
2.引數的例子:
typeof(int *) a,b;
等價於:
int
*a,*b;
1,把y定義成x指向的資料型別:
typeof (*x) y;
2,把y定義成x指向資料型別的陣列:
typeof (*x) y[4];
3,把y定義成乙個字元指標陣列:
typeof (typeof(char *)[4]) y;
這與下面的定義等價:
char *y[4];
4,
typeof(int *) p1,p2;
等價於:
int
*p1, *p2;
5,
typeof(int) *p3,p4;
等價於:
int
*p3, p4;
6,
typeof(int [10]) a1, a2;
等價於:
int
a1[10], a2
[10];
請注意,typeof構造中的型別名不能包含儲存類說明符,如extern或static。不過允許包含型別限定符,如const或volatile。例如,下列**是無效的,因為它在typeof構造中宣告了extern:
typeof(extern
int) a;
extern
typeof(int) b;
typeof(char * const) p = "a";
typeof構造的主要應用是用在巨集定義中。可以使用typeof關鍵字來引用巨集引數的型別。 C語言中的typeof
關鍵字typeof用於獲取表示式的資料型別。只有部分編譯器支援,這個特性在linux核心中應用非常廣泛,1.const typeof type 0 member mptr ptr 是定義乙個 mptr指標變數,型別和member的型別一樣 typeof是獲得乙個變數的型別,type 0 member...
C語言typeof詳解
typeof 是 gnu c 標準裡特有的擴充套件,標準的 iso c 並沒有這個關鍵字,所以在編譯的時候不能加任何 iso 的 c 標準選項,否則會報錯。使用時加入 std gnu90 即 gnu 的標準即可。typeof的作用類似與sizeof,區別在於sizeof是得到引數的大小而typeof...
C語言typeof詳解
typeof 是 gnu c 標準裡特有的擴充套件,標準的 iso c 並沒有這個關鍵字,所以在編譯的時候不能加任何 iso 的 c 標準選項,否則會報錯。使用時加入 std gnu90 即 gnu 的標準即可。typeof的作用類似與sizeof,區別在於sizeof是得到引數的大小而typeof...