C語言中的typeof關鍵字

2021-06-21 04:16:59 字數 1248 閱讀 3178

typeof關鍵字是c語言中的一種新擴充套件,返回變數的型別。從本質上講,它更像是使用typedef定義乙個型別名稱。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;

下面是兩個等效宣告,用於宣告int型別的變數a。

typeof(int) a; /*int型別*/

typeof('b') a; /* gcc中這個表示式的型別是int(自動提公升為int),注意typeof(char)和typeof('b')得到的不是一樣的,這個用sizeof可以看出來*/

在c語言中字元常量型別為int型別.在c++中字元常量型別為char型別.

typeof在協助內嵌表示式的宣告時非常有用。這裡演示乙個如何定義乙個安全(在任何情況下,各引數只會被計算一次)的求最大值的巨集。

#define max(a,b)

()讓區域性變數名以下劃線開關的原因是避免與內嵌表示式被使用時傳進來的引數名相衝突。我們更希望建立一種新的語法規則,按照這種語法規則,宣告的變數的作用域只在該變數初始化之後。相信這會是一種更加可靠的避免衝突的方法。

3、使用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";

4、如果你要把typeof寫在標頭檔案中,而且這些標頭檔案是要用在iso c程式中,那麼應該寫成__typeof__而不是typeof

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

C語言中的typeof關鍵字

typeof關鍵字是c語言中的乙個新擴充套件。typeof的引數可以是兩種形式 表示式或型別。下面是使用表示式的的例子 typeof x 0 1 這裡假設x是乙個函式指標陣列,這樣就可以得到這個函式返回值的型別了。如果將typeof用於表示式,則該表示式不會執行。只會得到該表示式的型別。以下示例宣告...

C語言中的typeof關鍵字

typeof關鍵字是c語言中的乙個新擴充套件。typeof的引數可以是兩種形式 表示式或型別。下面是使用表示式的的例子 typeof x 0 1 這裡假設x是乙個函式指標陣列,這樣就可以得到這個函式返回值的型別了。如果將typeof用於表示式,則該表示式不會執行。只會得到該表示式的型別。以下示例宣告...