typeof關鍵字是c語言中的乙個新擴充套件。只要可以接受typedef名稱,sun studio c 編譯器就可以接受帶有typeof的結構,包括以下語法類別:
宣告函式宣告符中的引數型別鍊錶和返回型別
型別定義
型別操作符s
sizeof操作符
復合文字
typeof實參
編譯器接受帶雙下劃線的關鍵字:__typeof和__typeof__。本文中的例子並沒有遵循使用雙下劃線的慣例。從語句構成上看,typeof關鍵字後帶圓括號,其中包含型別或表示式的名稱。這類似於sizeof關鍵字接受的運算元(與sizeof不同的是,位欄位允許作為typeof實參,並被解釋為相應的整數型別)。從語義上看,typeof 關鍵字將用做型別名(typedef名稱)並指定型別。
使用typeof的宣告示例
下面是兩個等效宣告,用於宣告int型別的變數a。
typeof(int) a; /* specifies variable a which is of the type int */
typeof('b') a; /* the same. typeof argument is an expression consisting of
character constant which has the type int */
以下示例用於宣告指標和陣列。為了進行對比,還給出了不帶typeof的等效宣告。
typeof(int *) p1, p2; /* declares two int pointers p1, p2 */
int *p1, *p2;
typeof(int) * p3, p4;/* declares int pointer p3 and int p4 */
int * p3, p4;
typeof(int [10]) a1, a2;/* declares two arrays of integers */
int a1[10], a2[10];
如果將typeof用於表示式,則該表示式不會執行。只會得到該表示式的型別。以下示例宣告了int型別的var變數,因為表示式foo()是int型別的。由於表示式不會被執行,所以不會呼叫foo函式。
extern int foo();
typeof(foo()) var;
使用typeof的宣告限制
請注意,typeof構造中的型別名不能包含儲存類說明符,如extern或static。不過允許包含型別限定符,如const或volatile。例如,下列**是無效的,因為它在typeof構造中宣告了extern:
typeof(extern int) a;
下列**使用外部鏈結來宣告識別符號b是有效的,表示乙個int型別的物件。下乙個宣告也是有效的,它宣告了乙個使用const限定符的char型別指標,表示指標p不能被修改。
extern typeof(int) b;
typeof(char * const) p = "a";
在巨集宣告中使用typeof
typeof構造的主要應用是用在巨集定義中。可以使用typeof關鍵字來引用巨集引數的型別。因此,在沒有將型別名明確指定為巨集實參的情況下,構造帶有所需型別的物件是可能的。
typeof關鍵字簡介 rtti
typeof 關鍵字是c語言中的乙個新擴充套件。只要可以接受typedef 名稱,sun studio c 編譯器就可以接受帶有typeof 的結構,包括以下語法類別 編譯器接受帶雙下劃線的關鍵字 typeof 和 typeof 本文中的例子並沒有遵循使用雙下劃線的慣例。從語句構成上看,typeof...
typeof關鍵字的作用
前言 typeof關鍵字是c語言中的乙個新擴充套件,這個特性在linux核心中應用非常廣泛。其實這和c 的auto關鍵字和可以推斷decltype關鍵字相當類似 1,把y定義成x指向的資料型別 typeof x y 2,把y定義成x指向資料型別的陣列 typeof x y 4 3,把y定義成乙個字元...
c語言中typeof關鍵字
c語言中typeof關鍵字 下面這兩個等效宣告,用於宣告int類弄的變數a typeof int a typeof b a 相當於獲取 b 的型別,定義乙個變數a 下面用於宣告指標和陣列 typeof int p1,p2 typeof p1 p2 p1與p2的型別一致 int p1,p2 typeo...