C語言的新擴充套件typeof

2021-07-13 07:19:28 字數 1610 閱讀 7021

typeof關鍵字是c語言中的乙個新擴充套件,是對c語言原先32個關鍵字的擴充套件,這一新擴充套件特性在linux的源**中可以經常看到,這一擴充套件是否有在c語言的新標準中,我沒有去驗證,但是據了解,大部分的gnu的c編譯器都支援了這一擴充套件,我在dev c++上也驗證了這一點。下面我們來看看這一擴充套件關鍵字的用法。

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;

1,把y定義成x指向的資料型別:

typeof (*x) y;
2,把y定義成x指向資料型別的陣列:

typeof (*x) y[4];
3,把y定義成乙個字元指標陣列:

typeof (typeof(char *)[4]) y;
這與下面的定義等價:

char *y[4];
4,

typeof(int *) p1,p2;
等價於:

int

*p1, *p2;

5,

typeof(int) *p3,p4;
等價於:

int

*p3, p4;

6,

typeof(int [10]) a1, a2;
等價於:

int

a1[10], a2

[10];

請注意,typeof構造中的型別名不能包含儲存類說明符,如extern或static。不過允許包含型別限定符,如const或volatile。例如,下列**是無效的,因為它在typeof構造中宣告了extern:

typeof(extern

int) a;

extern

typeof(int) b;

typeof(char * const) p = "a";

typeof構造的主要應用是用在巨集定義中。可以使用typeof關鍵字來引用巨集引數的型別。

C語言中的typeof

關鍵字typeof用於獲取表示式的資料型別。只有部分編譯器支援,這個特性在linux核心中應用非常廣泛,1.const typeof type 0 member mptr ptr 是定義乙個 mptr指標變數,型別和member的型別一樣 typeof是獲得乙個變數的型別,type 0 member...

C語言typeof詳解

typeof 是 gnu c 標準裡特有的擴充套件,標準的 iso c 並沒有這個關鍵字,所以在編譯的時候不能加任何 iso 的 c 標準選項,否則會報錯。使用時加入 std gnu90 即 gnu 的標準即可。typeof的作用類似與sizeof,區別在於sizeof是得到引數的大小而typeof...

C語言typeof詳解

typeof 是 gnu c 標準裡特有的擴充套件,標準的 iso c 並沒有這個關鍵字,所以在編譯的時候不能加任何 iso 的 c 標準選項,否則會報錯。使用時加入 std gnu90 即 gnu 的標準即可。typeof的作用類似與sizeof,區別在於sizeof是得到引數的大小而typeof...