typeof關鍵字簡介

2022-09-03 00:33:24 字數 1561 閱讀 5680

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...