C語言高階(一) 關鍵字與條件編譯

2021-09-26 10:06:57 字數 2437 閱讀 7374

1. 關鍵字

c語言中的關鍵字共32個,可分為以下幾類:

1-1 基本資料型別(5個)

void :宣告函式無返回值或無引數,宣告無型別指標,顯式丟棄運算結果

char :字元型型別資料,屬於整型資料的一種

int :整型資料,通常為編譯器指定的機器字長

float :單精度浮點型資料,屬於浮點資料的一種

double :雙精度浮點型資料,屬於浮點資料的一種

1-2 型別修飾關鍵字(4個)

short :修飾int,短整型資料,可省略被修飾的int。

long :修飾int,長整形資料,可省略被修飾的int。

signed :修飾整型資料,有符號資料型別

unsigned :修飾整型資料,無符號資料型別

1-3 複雜型別修飾關鍵字(5個)

struct :結構體宣告

union :共用體宣告

enum :列舉宣告,用於乙個變數存在幾種可能的取值,相當於一系列的#define xx xx

typedef :宣告型別別名,為已有的型別重新命名

typedef

int size; size i =5;

typedef

enum workday;

// workday被賦予列舉型別的功能,可用來定義其他變數

workday today;

// today是乙個列舉型別,且其只能在一定範圍內取值。

sizeof :得到特定型別或特定型別變數的大小

1-4 儲存型別關鍵字(6個)

auto :指定為自動變數,由編譯器自動分配及釋放。通常在棧上分配

static :指定為靜態變數,分配在靜態變數區,修飾函式時,指定函式作用域為檔案內部

static作用詳解

static例項說明

對於區域性變數:static區域性變數只被初始化一次,下一次的運算依據上一次的結果值
register :指定為暫存器變數,建議編譯器將變數儲存到暫存器中使用,也可以修飾函式形參,建議編譯器通過暫存器而不是堆疊傳遞引數

extern :指定對應變數為外部變數,即標示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。

const :與volatile合稱「cv特性」,指定變數不可被當前執行緒/程序改變(但有可能被系統或其他執行緒/程序改變)

volatile :與const合稱「cv特性」,指定變數的值有可能會被系統或其他程序/執行緒改變,強制編譯器每次從記憶體中取得該變數的值

1-5 跳轉結構(4個)

return :用在函式體中,返回特定值(或者是void值,即不返回值)

break :跳出當前迴圈或switch結構

goto :無條件跳轉語句

1-6 分支結構(5個)

if :條件語句,後面不需要放分號

else :條件語句否定分支(與if連用)

switch :開關語句(多重分支語句)

case :開關語句中的分支標記

default :開關語句中的「其他」分支,可選。

1-7 迴圈結構(3個)

for:for迴圈結構

do :do迴圈結構,do 1 while(2); 的執行順序是1->2->1…迴圈,2為迴圈條件

while :while迴圈結構、

2. 條件編譯

參考鏈結

2-1 #if vs. if

#if 為條件編譯的一種,條件編譯裡面有判斷語句,比如 #if 、#else 、#elif 及 #endif

它的意思是如果巨集條件符合,編譯器就編譯這段**,否則,編譯器就忽略這段**而不編譯,如

#if a   

// 滿足條件a,則編譯**a

code a

#endif

而 if 語句則不然,if 是 c 語言中的關鍵字,它根據表示式的計算結果來覺定執行那個語句,它裡面的每個分支都編譯了的, 如

#define a 0

if(a >1)

printf

("a > 1");

//編譯器編譯該語句,但因為a == 0 未執行

else

if(a ==1)

printf

("a == 1");

//編譯器編譯該語句,但因為a == 0 未執行

else

printf

("a < 1");

//編譯器編譯該語句,因為a == 0 故執行

2-2 #if defined

如果定義了巨集 x,則會編譯** x,否則不編譯。

#if defined (x)

code x

#endif

C語言 條件編譯和static關鍵字

include ifdef hello char c hello world 如果hello這個巨集存在,包含這段 else char c no zuo,no die 否則包這段 endif int main 程式想通過記住之前的值,然後不斷疊加上去 include int count 0 int ...

C語言基礎知識 一 關鍵字

儲存類別說明符變數 auto register static extern thread local typedef 儲存型別限定符 const volatile restrict atomic 1 register 暫存器變數,c語言要求用register修飾的變數通常儲存在cpu的暫存器中,防止...

C語言之關鍵字 巨集定義 條件編譯

區域性變數 特點 注意 區域性變數沒有固定的初始化值,開發中千萬不能使用未初始化的區域性變數 儲存位置 區域性變數儲存在棧中,當作用域結束系統會自動釋放棧中的的區域性變數。特點 如果存在和全域性變數同名的區域性變數,那麼區域性變數會覆蓋全域性變數 注意 全域性變數如果沒有進行初始化,系統缺省會將全域...