typeof
關鍵字是c語言中的乙個新擴充套件。只要可以接受typedef
名稱,sun studio c 編譯器就可以接受帶有typeof
的結構,包括以下語法類別:
編譯器接受帶雙下劃線的關鍵字:__typeof
和__typeof__
。本文中的例子並沒有遵循使用雙下劃線的慣例。從語句構成上看,typeof
關鍵字後帶圓括號,其中包含型別或表示式的名稱。這類似於sizeof
關鍵字接受的運算元(與sizeof
不同的是,位欄位允許作為typeof
實參,並被解釋為相應的整數型別)。從語義上看,typeof
關鍵字將用做型別名(typedef名稱)並指定型別。
下面是兩個等效宣告,用於宣告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 */如果將typeofint *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];
用於表示式,則該表示式不會執行。只會得到該表示式的型別。以下示例宣告了int型別的var
變數,因為表示式foo()
是int
型別的。由於表示式不會被執行,所以不會呼叫foo
函式。
extern int foo();請注意,typeoftypeof(foo()) var;
構造中的型別名不能包含儲存類說明符,如extern
或static
。不過允許包含型別限定符,如const
或volatile
。例如,下列**是無效的,因為它在typeof
構造中宣告了extern
:
typeof(extern int) a;下列**使用外部鏈結來宣告識別符號b
是有效的,表示乙個int
型別的物件。下乙個宣告也是有效的,它宣告了乙個使用const
限定符的char
型別指標,表示指標p
不能被修改。
extern typeof(int) b;typeoftypeof(char * const) p = "a";
構造的主要應用是用在巨集定義中。可以使用typeof
關鍵字來引用巨集引數的型別。因此,在沒有將型別名明確指定為巨集實參的情況下,構造帶有所需型別的物件是可能的。
typeof關鍵字簡介
typeof關鍵字是c語言中的乙個新擴充套件。只要可以接受typedef名稱,sun studio c 編譯器就可以接受帶有typeof的結構,包括以下語法類別 宣告函式宣告符中的引數型別鍊錶和返回型別 型別定義 型別操作符s sizeof操作符 復合文字 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...