C 中typedef用法說明

2021-10-19 09:06:53 字數 1907 閱讀 5532

typedef宣告提供了一種將識別符號宣告為型別別名的方法,用於替換複雜的型別名。

解釋

在宣告中使用typedef說明符時,會指定這個宣告是typedef宣告,而不是變數或函式宣告。通常,typedef說明符出現在宣告的開頭,但允許它出現在型別說明符之後,或者出現在兩個型別說明符之間。

typedef宣告可以在同一行上宣告乙個或多個識別符號(例如int和指向int的指標),它可以宣告陣列和函式型別、指標和引用、類型別等。此宣告中引入的每個識別符號都成為typedef名稱,只是省略了typedef。

typedef說明符不能與除型別說明符之外的任何其他說明符組合。

typedef名稱是現有型別的別名,不是新型別的宣告。typedef不能用於更改現有型別名稱(包括typedef名稱)的含義。一旦宣告,typedef名稱只能重新宣告為再次引用同一型別。typedef名稱僅在其可見的範圍內有效:不同的函式或類宣告可以定義具有不同含義的同名型別。

用於鏈結的typedef名稱

形式上,如果typedef宣告定義了乙個未命名的類(class)或列舉(enum),那麼宣告這個宣告的第乙個typedef名稱將被用來表示類型別或列舉型別,僅用於鏈結目的。例如,在typedef struct s;中,s是用於鏈結的typedef名稱。以這種方式定義的類或列舉型別具有外部鏈結(除非它位於未命名的命名空間中)。

以這種方式定義的未命名類應該只包含c相容的構造。尤其是,它不能:

所有成員類也必須滿足這些要求(遞迴地)。

注意

type alias使用不同的語法提供與typedef相同的功能,並且也適用於模板名稱。

例子

// 最簡單的typedef使用

typedef

unsigned

long ulong;

// 如下的兩個物件具有相同的型別

unsigned

long l1;

ulong l2;

// 以下定義了更複雜的型別

typedef

int int_t,

*intp_t,

(&fp)

(int

, ulong)

, arr_t[10]

;// 下列兩個物件具有相同的型別

int a1[10]

;arr_t a2;

// c語言中通常使用的避免寫「struct s」的方式

typedef

struct

s,*ps;

// 以下兩個物件具有相同的型別

ps ps1;

s* ps2;

// 下面的語句會報錯,因為儲存類說明符(storage-class-specifier)static不能在typedef宣告**現

// typedef static unsigned int uint;

// typedef可以在宣告語句的任何位置出現

long

unsigned

typedef

intlong ullong;

// 但是上述的語句我們通常的使用方法是"typedef unsigned long long int ullong;"

// std::add_const, like many other metafunctions, use member typedefs

template< class t>

struct add_const

;typedef

struct node listnode;

// error: conflicts with the previously declared struct name

官方文件

c 中map常見用法說明

c 中map提供的是一種鍵值對容器,每一對中的第乙個值稱之為關鍵字 key 每個關鍵字只能在map 現一次 第二個稱之為該關鍵字的對應值。標頭檔案 include map int,string id name 使用 賦值是從c 11開始的,因此編譯器版本過低時會報錯,如visual studio 2...

Python 中bisect用法說明

bisect是python內建模組,用於有序序列的插入和查詢。插入 import bisect arr 1 3,3 6,8 12,15 value 3idx left bisect.bisect left arr,value print idx left idx right bisect.bisec...

C 泛型用法說明

泛型是c 2.0 語言和公共語言執行庫 clr 中的乙個新功能。泛型將型別引數的概念引入 net framework 型別引數使得設計如下類和方法成為可能 這些類和方法將乙個或多個型別的指定推遲到客戶端 宣告並例項化該類或方法的時候。例如,通過使用泛型型別引數 t,可以編寫其他客戶端 能夠使用的單個...