| 子類 | 範例 | 說明 |
| 賦值語句 | x = y + z; | 計算右側,存入左側,副作用:修改 x |
| 運算語句(無副作用) | y + z; | 計算結果丟棄,通常無意義,編譯器會警告 |
| 自增/自減/函數調用 | i++; func(); | 副作用為主:修改變量/執行函數體 |
⚠️ 注意
y + z; // 無副作用表達式語句,GCC -Wall 警告: "statement with no effect"
x = y + z; // 有副作用(修改 x),正常
2. 函數調用語句:模組化的橋樑
形式:函數名(實際參數表);
執行語義:
- 求值所有實際參數(順序未規定)
- 將值傳遞給形式參數(按值傳遞)
- 跳轉執行函數體
- 遇
return 或函數結尾返回
- 調用表達式的值為函數返回值(若為 void 則無值)
範例
printf("C Program"); // 調用庫函數,輸出字符串,返回輸出字符數(通常忽略)
x = max(a, b); // 調用自定義函數,接收返回值賦給 x
3. 控制語句:程式流程的導航儀
C 語言有 9 種控制語句,分為三大類:
3.1 條件判斷語句 (2 種)
- if 語句:單分支
if、雙分支 if-else、多條件 if-else if-else
- switch 語句:多路分支,配合
case/default/break
3.2 循環執行語句 (3 種)
- while 語句:先判斷後執行,零次或多次
- do-while 語句:先執行後判斷,至少一次
- for 語句:初始化、條件、迭代三合一,計數循環首選
3.3 轉向語句 (4 種)
- break:跳出最近的
switch/while/do-while/for
- continue:跳過本次循環剩餘部分,直接進入下次迭代判斷
- goto:無條件跳轉到標號(慎用)
- return:從函數返回,可帶返回值
4. 復合語句:結構化的基本單元
形式:{ 語句₁; 語句₂; ... 語句ₙ; }
核心規則
- 視為單條語句:任何需要單條語句的地方(如
if 後、while 體)都可用復合語句替代
- 內部語句必須以 ; 結尾
- 右大括號 } 後不能加分號(這是語句塊結束,非語句)
- 可嵌套:形成作用域層級
範例
- {
- x = y + z;
- a = b + c;
- printf("%d%d", x, a);
- }
這是一條復合語句,可用於 if (cond) { ... } 中。
作用域與聲明
C99 之前:聲明必須在復合語句開頭。
C99 之後:聲明可混合在語句中。
變量生命週期:自動變量在進入塊時創建,離開塊時銷毀。
5. 空語句:最神秘的佔位符
形式:;(單獨一個分號)
語義:什麼都不執行,直接進入下一條語句。
兩大經典用途
用途 1:空循環體
- while (getchar() != '\n');
功能:讀取並丟棄輸入緩衝區中直到換行符的所有字符。循環體為空語句。
用途 2:for 循環的全部工作在控制部分
for (i = 0; i < n; sum += a[i++]); // 求和,循環體為空
// 等價於
for (i = 0; i < n; i++) sum += a[i];
用途 3:標號後的空語句 (C99+)
label: ; // 標號後必須跟語句,空語句滿足語法
⚠️ 危險:誤加分號導致的邏輯錯誤
if (x > 0); // ❌ 這裡有個空語句!
printf("x is positive"); // 無條件執行!
while (i < 10); // ❌ 無限循環!空語句做循環體
i++; // 永遠不執行
語句識別快速判斷指南
| 代碼片段 | 語句類別 | 判斷依據 |
x = 1; | 表達式語句(賦值) | 有 = 運算符,以 ; 結尾 |
printf("hi"); | 函數調用語句(也是表達式語句) | 函數名() 形式,以 ; 結尾 |
if (x) y=1; | 控制語句 | 關鍵字 if 開頭 |
{ x=1; y=2; } | 復合語句 | { } 包圍多語句 |
; | 空語句 | 只有分號 |
for(;;); | 控制語句(含空語句體) | for 關鍵字,體為 ; |
語句與表達式的本質區別
| 維度 | 表達式 | 語句 |
| 有值/類型 | 是 | 否 (除表達式語句外) |
| 可嵌套 | 是 (運算元可為表達式) | 否 (語句不能嵌套在表達式中) |
| 以 ; 結尾 | 否 | 是 (表達式語句/函數調用/空語句) |
| 控制流程 | 否 | 是 (控制語句) |
| 建立作用域 | 否 | 是 (復合語句) |
總結
C 語言的五大語句類別構成了程式的完整骨架:
- 表達式語句承擔計算與副作用(賦值、函數調用)
- 控制語句實現邏輯分支、循環、跳轉
- 復合語句提供結構化塊與作用域
- 空語句作為特殊佔位符服務於空循環體等場景
掌握每類語句的語法形式、執行語義、嵌套規則、常見陷阱(特別是空語句誤用),是寫出正確、清晰、可維護 C 代碼的必備基本功。
- 上一篇文章: C語言賦值語句深度解析:從基礎語法到嵌套陷阱
- 下一篇文章: C語言逗號運算符與逗號表達式:被忽視的序列點藝術
Copyright ©
程式碼之家 All Rights Reserved