ANSI C標準C語言共有32個關鍵字,如下:
break | case | char | const | continue | do | ||
double | else | enum | extern | for | goto | if | |
int | long | register | return | short | signed | sizeof | static |
struct | switch | typedef | union | unsigned | volatile |
1999年12月16日,ISO推出了C99標準,該標準新增了5個C語言關鍵字:
inline | restrict | _Bool | _Complex | _Imaginary |
2011年12月8日,ISO發佈C語言的新標準C11,該標準新增了7個C語言關鍵字:
_Alignas | _Alignof | _Atomic | _Static_assert | _Noreturn | _Thread_local | _Generic |
目前一般用的C語言都是ANSI C標準,部分編譯器支持C99標準。注意,C語言的關鍵字是區分大小寫的。編程鳥在其博客C語言關鍵字解析中,對這些關鍵字進行了分類,在此借鑑一下,我按照此分類對ANSI C標準的C語言關鍵字做簡要介紹。
第一類,有關數據“模子”的關鍵字:void、char、short、int、long、float、double、sizeof;
第二類,有關數據符號的關鍵字:signed、unsigned;
第三類,構造類型:struct、union、enum、typedef;
第四類,有關存儲與生命週期的類型:auto、static、extern、register、const、volatile;
第五類,有關語句的類型:if、else、for、while、do、switch、case、default、goto、break、continue、return
數據類型 | void | 聲明函數無返回值或無參數,聲明無類型指針 |
char | 聲明字符型變量或函數 | |
short | 聲明短整型變量或函數 | |
int | 聲明整型變量或函數 | |
long | 聲明長整型變量或函數 | |
float | 聲明浮點型變量或函數 | |
double | 聲明雙精度變量或函數 | |
sizeof | 計算數據類型長度 | |
數據符號 | signed | 聲明有符號類型變量或函數 |
unsigned | 聲明無符號類型變量或函數 | |
構造類型 |
struct | 聲明結構體變量或函數 |
union | 聲明共用數據類型 | |
enum | 聲明枚舉類型 | |
typedef | 用以給數據類型取別名 | |
有關存儲與生命週期的類型 | auto | 聲明自動變量 |
static | 聲明靜態變量 | |
extern | 聲明變量是在其他文件 | |
register | 聲明寄存器變量 | |
const | 聲明只讀變量 | |
volatile | 說明變量在程序執行中可被隱含地改變 | |
有關語句的類型 | if | 條件語句 |
else | 條件語句否定分支(與 if 連用) | |
for | 一種循環語句 | |
while | 循環語句的循環條件 | |
do | 循環語句的循環體 | |
switch | 用於開關語句 | |
case | 開關語句分支 | |
default | 開關語句中的“其他”分支 | |
goto | 無條件跳轉語句 | |
break | 跳出當前循環 | |
continue | 結束當前循環,開始下一輪循環 | |
return | 子程序返回語句(可以帶參數,也可不帶參數)循環條件 |
關鍵字的大概說明如上表所示。本文不對每一個關鍵字做詳細介紹,個人認爲數據類型、符號類型和有關語句的類型不是難點,本文從這3個類型中選幾個可能出錯的稍作展開。
數據類型和數據符號
數據類型是最基本的關鍵字,表示一個變量的類型。不同的類型所佔的字節大小不同,我用VS2010驗證如下:
int i;
unsigned int ii;
char c;
short sh;
double dou;
float f;
long l;
long int li;
long long int lli;
char str1[]={"abcde"};
char str2[]={'a','b','c','d','e'};
char str3[5]={"abcde"};
printf("length of int: %d\r\n",sizeof(i));
printf("length of unsigned int: %d\r\n",sizeof(ii));
printf("length of char: %d\r\n",sizeof(c));
printf("length of short: %d\r\n",sizeof(sh));
printf("length of double: %d\r\n",sizeof(dou));
printf("length of float: %d\r\n",sizeof(f));
printf("length of long: %d\r\n",sizeof(l));
printf("length of long int: %d\r\n",sizeof(li));
printf("length of long long int: %d\r\n",sizeof(lli));
printf("length of str1: %d\r\n",sizeof(str1));
printf("length of str2: %d\r\n",sizeof(str2));
printf("length of str3: %d\r\n",sizeof(str3));
這裏注意sizeof是用來計算變量所佔空間大小,單位爲字節。輸出結果如下:
數據類型和數據符號配合使用,C語言默認類型都是有符號的,只有前面用unsigned修飾,才表示無符號類型。
不同的系統數據類型的長度是不一樣的,我的VS2010是32位系統的。32位系統和64位系統比較如下(表格中長度單位是比特):
I表示:int類型
L表示:long類型
P表示:pointer指針類型
32表示32位系統
64表示64位系統
字符串長度
上面的例子中對字符串進行了簡單表示。可以發現str1、str2、str3長度是不一樣的。
像str1這樣不指定數組長度,直接用雙引號賦值,除了正常的字符串外,在字符串最後,系統會默認加一個‘\0’,表示結束。所以str1的長度就是6字節;
像str2這樣雖不指定數組長度,但是用單引號賦值,數據長度就是實際字符個數。所以str2長度就是5字節;
像str3這樣指定數據長度,用雙引號賦值,sizsof顯示長度是數組指定的長度,也就是5字節。
構造類型和有關存儲於生命週期的類型
構造類型和有關存儲於生命週期的類型,將另寫專題文章進行講解,這兩個類型的每一個關鍵字都比較重要,且展開講解也需要大量篇幅。瞭解詳細介紹,點擊下面鏈接即可。
C語言關鍵字之static
C語言關鍵字之extern
C語言關鍵字之register
C語言關鍵字之const
C語言關鍵字之volatile
C語言關鍵字之struct
C語言關鍵字之union
C語言關鍵字之enum
C語言關鍵字之typedef
參考文獻:
[1]https://blog.csdn.net/m0_38121874/article/details/82535129