C C語言中識別符號宣告的幾個關鍵字總結

2021-07-01 18:31:20 字數 2040 閱讀 8502

c語言中宣告乙個名稱就是把乙個識別符號與某個c語言物件相關聯,如變數、函式或型別,c語言中可以宣告的名稱包括:變數、函式、型別、型別標誌、結構成員與聯合成員、列舉常量、語句標號和預處理器巨集。除了語句標號和預處理器巨集之外,所有識別符號都在c語言宣告中宣告,變數、函式、型別放在宣告的宣告符中,型別標誌、結構成員與聯合成員和列舉常量在宣告的某種型別說明符中宣告,語句標號在c語言函式中出現時宣告,而預處理器巨集用#define預處理器命令宣告。

如下列宣告:

extern const volatile unsigned long int i;

習慣上先寫儲存類說明符extern,然後是型別限定符const volatile,最後是型別說明符unsignedlong int。

儲存類說明符確定所宣告物件的生存期(除了typedef是個特例),宣告中最多可以出現乙個儲存類說明符,具體列舉如下:

auto:只在塊內的變數宣告中允許,表示變數具有本地(自動)生存期(這是預設,因此c語言程式中很少看到auto說明符)。塊宣告中,若為非函式型別,預設儲存類說明符為auto。

extern:出現在頂層或塊中的外部函式與變數宣告中,表示宣告的物件具有靜態生存期,連線程式知道其名稱。頂層宣告中預設儲存類說明符為extern,但省略儲存類說明符不同於提供extern。塊宣告中,若是函式,預設儲存類說明符為extern。

register:可以用於本地變數或引數宣告,作用相當於auto,只不過它要向編譯器提供提示說該物件會被頻繁使用,應該採取一種最小化訪問時間的分配方式。函式引數預設無儲存類說明符,如非register,如果有實際需求,可給函式引數新增儲存類說明符register。

static:可以放在函式與變數宣告中。在函式定義時,其只用於指定函式名而不將函式匯出到連線程式。在函式宣告中,其表示檔案後面會定義宣告的函式,儲存類為static。在資料宣告中,總是表示定義的宣告不匯出到連線程式。用這個儲存類說明符的變數具有靜態生存期(而auto則指定本地生存期)。

typedef:表示宣告定義新的資料型別名,而不是函式與變數宣告。資料型別名出現在變數宣告中出現變數名的地方,資料型別本身是變數名要指定的型別。

型別限定符const、volatile與restrict指定型別的其它屬性,這些屬性只在通過左值訪問該型別物件時與型別有關。const與volatile是c89中增加的,restrict是c99中增加的。

const:const限定型別的左值表示式不能用來修改物件,即這種左值不能作為賦值表示式的左運算元或遞增與遞減運算子的運算元,目的是用const限定符指定數值不變的物件,讓c語言編譯器保證程式設計人員不改變這個值。const用於指標宣告時,位置不同,效果不同,如下例子:

int * const const_pointer; // 常量指標const int * pointer_to_const; // 常量資料的指標

volatile:volatile型別限定符告訴標準c語言實現,某些物件可以用實現不能控制的方式改變量值,即易失物件。volatile最常見的用法是對特殊記憶體位址提供可靠的訪問,計算機硬體或中斷處理器之類的非同步程序使用這些特殊記憶體位址。

restrict:restrict只能用於限定物件指標或不完整型別,作為c語言編譯器的非別名提示,即目前只有指標是訪問其所指物件的唯一方式,破壞這個假設會造成不確定行為。這樣做的好處是,能幫助編譯器進行更好的**優化,生成更有效率的彙編**。

函式宣告符是c99中增加的,函式說明符inline只能在函式宣告中出現,這種函式稱為內聯函式,函式說明符可以多次出現而不改變含義,使用inline提示c實現,函式呼叫應盡量快。

型別說明符對所宣告的程式識別符號的資料型別提供一定資訊,其它型別資訊由宣告符指定,型別說明符還可以定義(作為***)型別標誌、結構成員名與聯合成員名和列舉常量。最初,c語言允許省略變數宣告和函式定義中的型別說明符,這時預設型別說明符為int,但現代c語言認為這是不良程式設計風格,事實上c99把它當作錯誤處理,較早的編譯器沒有實現void型別,因此函式定義中省略型別說明符的目的是告訴讀者這個函式不返回數值(但編譯器要假設其返回數值),現代c語言則用void型別宣告無返回值的函式。結構、聯合或列舉定義的型別指定符定義新型別或列舉常量,如果只要定義型別,則可以從宣告中省略所有宣告符,只編寫型別說明符,無意義的宣告通常被忽略。關於型別的詳細說明將在後面介紹。

C中識別符號和關鍵字

2018 01 13 建立人 ruo xiao英文 identifier 變數 函式和型別等名字。由大小寫字母 數字和下劃線組成,對大小寫敏感。對長度沒有限制,但是標準允許編譯器忽略第31個字元之後的字元。是c語言提供的有特殊含義的符號,也叫做 保留字 不能作為識別符號。其和識別符號是從屬關係還是並...

Python中識別符號和關鍵字

1.識別符號由字母 數字 下劃線組成,且不能以數字開頭 fromno12 合法的識別符號 from 12 不合法的識別符號,識別符號不能包含 符號 1ndobj 不合法的識別符號,識別符號不能以數字開頭2.python中的識別符號是區分大小寫的 3.python中的識別符號不能使用關鍵字 4.在為p...

C語言複雜識別符號宣告

宣告符 declarator 中的基本符號 返回的型別為 的函式 元素型別為 的陣列 指向 型別的指標 這些符號在宣告符中是有 結合律和優先順序 的 和表示式一樣,你可以通過額外的圓括號來改變宣告符的含義。翻譯乙個宣告符時,要從識別符號開始,依次反覆執行下面的步驟,直到把宣告符內所有的符號都翻譯出來...