typeof

原文:http://hi.baidu.com/leowang715/blog/item/b0b96d6f972e7dd080cb4a06.html


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構造中的類型名不能包含存儲類說明符,如externstatic。不過允許包含類型限定符,如constvolatile。例如,下列代碼是無效的,因爲它在typeof構造中聲明瞭extern

typeof(extern int) a;

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

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

在宏聲明中使用typeof

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章