C語言關鍵字

C語言關鍵字

關鍵字(保留字)包括C90,C99,C11新添加的關鍵詞彙,關鍵字不可以作爲標識符使用,許多關鍵字用於指定不同類型。如果關鍵字使用不當,將不會被編譯器識別。保留標識符已經被指定了它們的用途和特性,以及使用權。如果使用保留標識符表達其他意思時編譯器雖然可以識別,不會引發錯誤,但是有些時候還是會出現一些問題,儘量避免使用。保留標識符包括_下劃線開頭的字符和標準庫函數名。


auto
_Alignas
_Alignof
_Atomic

auto:聲明自動變量,C語言中最常見存儲關鍵詞,在不定義存儲關鍵詞時編輯器自動定義爲auto關鍵詞。並且不會在代碼行中顯示。僅在語句內使用。

_Alignas:設置對象的對齊指定符

_Alignof:查詢其操作數類型的對齊要求

_Atomic:原子類型限定符與說明符



break
_Bool

 

break:結束循環語句與跳出switch結構。在某些程序調試時被設置爲斷點,break語句對if-else的條件語句不起作用。在多層循環中,一個break語句只向外跳一層。

_Bool:布爾類型聲明。只有0和1兩個值,可作爲宏 true 與 false使用。


case
char
_Complex
const
continue

 

case:開關語句的分支標記。與switch配合使用,通常在每個case結尾處加入break,不然將自動執行下一個case語句。

           case後面必須是整數或常量表達式。

char:字符類型。屬於整數數據的一種,在使用時只能配合單引號使用。由於在C語言中沒有字符串類型,可以使用char間接代替(char*)這個編譯方式在C語言中有它的語義。表示以\0爲結束的字符串。

_Complex:復浮點類型的複數聲明可以寫成一個實數與一個實數乘虛數單位的和的數,有三種複數類型:float _Complex , double _Complex, long double _Complex 每個複數類型與擁有二個對應實數類型元素的數組相同的對象表示和對齊要求。數組第一元素保有實部,而第二個元素保有虛部。

const:類型限定符。編譯器將帶有const的聲明放入只讀內存中,使常類型,常類型的變量或對象的值不能被當前線程或進程改變。const僅應用於左值表達式中,不然將無法使用。

continue:結束當前循環,終止循環內下方未執行的語句,開啓新的循環。它僅能出現在 for 、 while 及 do-while 的循環體內。


default
do
double

 

default開關語句的分支標記。與switch配合使用。

double:雙精度浮點類型。相對單精度浮點數,double使用8字節來進行存儲。有效數是15-16位

do:循環結構,與while配合使用。重複循環執行語句,當表達式爲真時繼續循環,表達式爲假時停止,當設置某個點停止時可以使用break語句結束。


extern
enum
else

 

extern:指定變量爲外部變量,以表示變量或者函數的定義在別的文件中與外部鏈接,能從整個程序的任何其他翻譯單元指代該標識符。所有非 static 函數、所有 extern 對象(除非之前聲明爲 static )和所有文件作用域的非 static 對象擁有此鏈接。

enum:枚舉類型聲明,枚舉類型是常量不是變量,不可以使用賦值表達式對其賦值。enum定義一組值的對象。它包含零個或多個值成員,但是不能出現相同的值和屬性

else:與if配套使用,條件語句否定分支,在內側if必須含有else。



float
for

 

float:單精度浮點類型,float使用4字節來存儲,有效數爲6-7位。

for:循環結構,執行循環。可以用作表達式或聲明,若它是表達式,則在首次求值 條件表達式 前將它求值一次,並捨棄其結果。若它是聲明,則它在整個循環體內都處於作用域內,包括 初始化子句 的剩餘部分、整個條件表達式、整個 迭代表達式 及整個循環語句。聲明於此聲明的變量只允許有 auto 和 register 存儲。條件表達式 在循環體前求值。若表達式的結果是零,則循環立即退出。迭代表達式 在循環體後求值,並捨棄其結果。求值 迭代表達式 後,將控制轉移到 條件表達式,初始化子句 、 條件表達式 和 迭代表達式 都是可選的。


goto
_Generic

 

goto:無條件跳轉語句,在無法用約定的構造將控制轉移到所想要的位置時使用。goto在跳轉到前附具名的語句時需要處於同個函數,除非此跳轉會進入變長度數組或別的可變修改類型的作用域。

_Generic:泛型選擇,在編譯時選擇數個表達式之一的辦法。


if
int
inline
_Imaginary

 

if:條件執行代碼,在代碼爲真時執行代碼,與else配套使用。if中可嵌套一個或多個if語句。

int:整數數據。定義整數變量的標識符。一般爲編譯器指定字節,多數電腦中佔用4字節,32比特。

inline:內聯函數,在函數聲明或定義中函數返回類型前加上inline,即可以把函數指定爲內聯函數。inline必須與函數定義放在一起才能使函數成爲內聯。內聯函數保證下列語義:任何擁有內部鏈接的函數都可以聲明成static inline  ,沒有其他限制。一個非 static 的內聯函數不能定義一個非const的函數局部static對象,並且不能使用文件作用域的static對象。

_Imaginary:虛浮點類型,可以寫成實數乘虛數單位的數,有三種虛數類型:float _Imaginary , double_Imaginary long ,double _Imaginary。虛數類型是獨立的,且與其對應實數類型不兼容,這禁止別名使用。



long

 

long:長整數類型。


_Noreturn

 

_Noreturn:函數指定符。表明函數不會執行到函數體結尾和retnurn語句處返回。


short struct
signed switch
sizeof _static_assert
static  

 

short:短整數類型。

signed:有符號數據類型

sizeof:運算符,需要得到特定類型或特定變量大小時使用,sizeof不能用於函數類型、不能確認類型的表達式(含void)或位域左值。

static:指定爲靜態變量(內部函數),在修飾函數時指定函數塊的作用域爲內部文件,它能用於在文件作用域的函數,以及文件和塊作用域的對象,但不能用於函數參數列表。從當前翻譯單元的所有作用域指代該標識符。所有static文件作用域標識符(函數和對象)都擁有此鏈接。

struct:結構體聲明,將多種元素類型和長度統一架構在一起。在使用前必須先定義它,其內部成員以順序分配到內存中。允許任意數量的變量聲明、位域聲明和靜態斷言聲明。不允許不完整類型的成員和函數類型的成員。結構體不能擁有有其自身類型的成員。允許指向其自身類型的指針成員,結構體聲明不建立作用域,所以在 struct-declaration-list 中引入的嵌套類型、枚舉及枚舉項會在定義結構體的外圍作用域可見。 對結構體的不同成員賦值是互不影響的。

switch:開關語句,針對基本數據類型中的整數類型執行代碼,switch()的參數類型不能爲實型。在需要按照整數類型執行多個分支中的一個或數個之處使用,switch 語句體可擁有任意數量的case:分支標記,不允許兩個case具有相同的值。

_static_assert:聲明,在編譯時求值該整數常量表達式並將它與零比較。若它比較等於零,則發生編譯錯誤,而若提供任何字符串字面量 ,則編譯器必須將它作爲錯誤消息的一部分顯示(除了不要求顯示基本源碼字符集以外的字符)否則,若該整數常量表達式不等於零,則什麼都不發生,不生成代碼。



typedef
_Thread_local

typedef:聲明定義(將複雜聲明定義簡單別名)同時typedef還是存儲類指定符,只是對存儲和鏈接無影響。若聲明以typedef爲存儲類指定符,則其中每個聲明符都會定義一個標識符爲指定類型的別名。因爲一個聲明中僅允許一個存儲類指定符,聲明不能爲static或extern 。typedef聲明不引入另一種類型,它只會建立既存類型的同義詞,故而 typedef 名與其所別名引用的類型兼容。 typedef 名與通常標識符,例如枚舉項、變量或函數共享通常命名空間。typedef 名可以是不完整類型,它會照常變得完整。

_Thread_local:線程存儲類指定符。它不能用於函數聲明。若將它用在對象聲明上,則它必須在同一對象的每次聲明上都存在。若將它用在塊作用域聲明上,則必須與static 或 extern其中一個組合以決定鏈接。


union
unsigned

union:聯合體聲明,在一個被定名的”聯合“變量內可以在不同時間使用任何不同數據類型和不同長度的變量,所有數據處於同一內存中,相互重疊存在,並且同一時間只能儲存其中一個成員變量的值同struct一樣,聯合默認訪問權限也是公有的,並且,也具有成員函數。對共用體的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在。

unsigned:無符號數據類型


void
volatile

void:用於不完整類型的聲明與無參數或無返回值的函數。

volatile:類型限定符,防止編譯器優化變量的值。要求每次編譯器直接讀值。這表明在執行的單個線程內,volatile 訪問不能被優化掉,亦不能與另一個被順序點分隔了 volatile 訪問的可觀副效應重排。一個非 volatile 值到 volatile 值的轉換是無效果的。欲使用 volatile 語義訪問非 volatile 對象,必須先將其地址轉換成指向 volatile 類型的指針,再通過該指針訪問該對象。



while

while:循環結構,重複執行循環體,直到標量類型的值變得比較等於零則退出。此情況每次迭代前發生。常以布爾和指針表達式爲循環控制表達式。布爾值 false 和任何指針類型的空指針值與零比較相等。設置某個點停止時可以使用break語句結束。

 


register
restrict
return

register:存儲指定符。只對聲明於塊作用的域的對象允許,包含函數參數列表,提示編譯器將該變量存儲在cpu的寄存器內,並且聲明爲register的對象不能用作取值運算符的參數,而且register數組不能轉換爲指針。

restrict:類型限定符,它只用於限定和約束指針,只有指向對象類型的指針才能被 restrict 限定,restrict語義僅用於左值表達式,在它的定義下的指針不能通過除此指針外的其他間接或直接的方式修改內容。

return:返回函數值給主調函數,並終止當前函數,作爲結尾return語句是必要,在無返回值時 } 花括號表示爲0.但在擁有返回值的時候return語句必須存在。


學:C primer Plus(第六版)參考:百度百科,cppreference.com

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