typeof關鍵字簡介 rtti

2022-06-12 19:09:09 字數 1746 閱讀 8154

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 */

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

構造中的型別名不能包含儲存類說明符,如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關鍵字是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...