天天看點

C語言關鍵字溫故

    C語言的關鍵字共有32個。

    一、資料類型關鍵字(12個):

關鍵字 作用
char 聲明字元型變量或函數
double 聲明雙精度變量或函數
float 聲明浮點型變量或函數
int 聲明整型變量或函數
short 聲明短整型變量或函數
long 聲明長整型變量或函數
signed 聲明有符号類型變量或函數
unsigned 聲明無符号類型變量或函數
void 聲明函數無傳回值或無參數,聲明無類型指針(基本上就這三個作用)
enum 聲明枚舉類型
struct 聲明結構體變量或函數
union 聲明聯合資料類型

二、控制語句關鍵字(12個):

分類 關鍵字 作用
循環語句  for 一種循環語句(可意會不可言傳)
do 循環語句的循環體 
while  循環語句的循環條件
break 跳出目前循環
continue 結束目前循環,開始下一輪循環 
條件語句 if 條件語句
else  條件語句否定分支(與 if 連用)
goto 無條件跳轉語句
開關語句 switch  用于開關語句
case 開關語句分支
default 開關語句中的“其他”分支 
return  子程式傳回語句(可以帶參數,也看不帶參數) 

三、存儲類型關鍵字(4個)

關鍵字 作用
auto  聲明自動變量一般不使用
extern 聲明變量是在其他檔案中聲明(也可以看做是引用變量)
register 聲明寄存器變量 
static  聲明靜态變量

四、其他關鍵字(4個)

關鍵字 作用
const  聲明隻讀變量 常量修飾符,類型限定詞
sizeof 計算資料類型長度
typedef 用以給資料類型取别名(當然還有其他作用)  存儲類關鍵詞
volatile 說明變量在程式執行中可被隐含地改變 類型修飾符(type specifier),指令關鍵字。

Volatile:應該解釋為“直接存取原始記憶體位址”比較合适。作用是作為指令關鍵字,確定本條指令不會因編譯器的優化而省略,且要求每次直接讀值。精确地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用儲存在寄存器裡的備份。

使用地方:

1、中斷服務程式修改的供其他程式檢測的變量需要加volatile

2、多任務環境下各任務間共享的标志應該加volatile

3、存儲器映射的硬體寄存器通常要加volatile,因為每次對它的讀寫都可能有不同意義

Const:

要求它所修飾的對象為常量,不可被改變,不可被指派,不可作為左值

1、 可以定義const常量,具有不可變性。

2、 便于進行類型檢查,使編譯器對處理内容有更多了解,消除了一些隐患

使用地方:

1、 在函數聲明時修飾參數

memmove(void *dst,  const void *src,  size_t len);

Static:

1、 static修飾一個函數,則這個函數隻能在本文本中調用,不能被其他檔案調用。

2、 static修飾局部變量,則這個局部變量存放在全局資料區的靜态變量區,初始化時自動初始化為0。初始化操作隻執行一次;這個局部變量的生命周期延長,直到程式運作結束以後才釋放。

3、 static修飾全局變量,則這個全局變量隻能在本檔案中通路,不能在其他檔案中通路。即便是extern外部聲明也不可以。

Typedef:

1、 typedef沒有建立任何新類型,它隻是為某個已存在的類型增加一個友善使用的标簽。

2、 與#define不同,typedef建立的符号名隻受限于類型,不能用于值

3、 typedef由編譯器解釋,不是預處理器

4、 定義函數指針

typedef  傳回類型(*新類型)(參數表)

typedef char (*PTRFUN)(int);

typedef的功能是定義新的類型。第一句就是定義了一種PTRFUN的類型,并定義這

種類型為指向某種函數的指針,這種函數以一個int為參數并傳回char類型。

typedef VOID (*oal_callback_t)(VOID);  //定義一類函數指針, 該類指針指向的函數入參和傳回值都為空

inline 内聯函數

在C語言中,如果一些函數被頻繁調用,不斷有函數入棧,即函數棧,會造成棧空間的大量消耗。

1、          關鍵字inline必須與函數定義體放在一起才能使函數成為内聯,僅将inline放在函數聲明前面不起任何作用。

2、           inline隻适合函數體内代碼簡單的函數使用,不能包含複雜的結構控制語句例如while、switch,并且内聯函數本身不能是直接遞歸函數(自己内部還調用自己的函數)。

3、          内聯是以代碼膨脹(複制)為代價。僅僅省去了函數調用的開銷,進而提高函數的執行效率。

4、          每一次内聯函數的調用都要指派代碼,将使程式的總代碼量增大,消耗更多的記憶體空間。

繼續閱讀