歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> C語言的新擴展typeof

C語言的新擴展typeof

日期:2017/3/3 12:03:05   编辑:Linux技術

說明

typeof關鍵字是C語言中的一個新擴展,是對C語言原先32個關鍵字的擴展,這一新擴展特性在Linux的源代碼中可以經常看到,這一擴展是否有在C語言的新標准中,我沒有去驗證,但是據了解,大部分的GNU的C編譯器都支持了這一擴展,我在DEV C++上也驗證了這一點。下面我們來看看這一擴展關鍵字的用法。

typeof的用法

typeof的參數可以是兩種形式:表達式或類型。

1. 表達式的例子:

[code]typeof (x[0](1))

這裡假設x是一個函數指針數組,這樣就可以得到這個函數返回值的類型了。如果將typeof用於表達式,則該表達式不會執行。只會得到該表達式的類型。以下示例聲明了int類型的var變量,因為表達式foo()是int類型的。由於表達式不會被執行,所以不會調用foo函數。

[code]extern int foo();
typeof(foo()) var;

2.參數的例子:

[code]typeof(int *) a,b;

等價於:

[code]int *a,*b;

其他應用例子

1,把y定義成x指向的數據類型:

[code]typeof (*x) y;
2,把y定義成x指向數據類型的數組:

[code]typeof (*x) y[4];
3,把y定義成一個字符指針數組:

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

[code]char *y[4];
4,

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

[code]int *p1, *p2;
5,

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

[code]int *p3, p4;
6,

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

[code]int a1[10], a2[10];

使用typeof的聲明限制

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

[code]typeof(extern int) a;
下列代碼使用外部鏈接來聲明標識符b是有效的,表示一個int類型的對象。下一個聲明也是有效的,它聲明了一個使用const限定符的char類型指針,表示指針p不能被修改。

[code]extern typeof(int) b;
typeof(char * const) p = "a";

在宏聲明中使用typeof

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

Copyright © Linux教程網 All Rights Reserved