基本控制語句
| 類別 | 語句 | 備註 |
| 迴圈 | while (cond) stmt | 先判斷 |
do stmt while (cond); | 至少執行一次 |
for (init; cond; step) stmt | 最常用 |
| 選擇 | if (cond) stmt [else stmt] | |
switch (expr) { case val: ... default: ... } | 需 break 防貫穿 |
goto label; | 慎用,可跳出多層迴圈 |
運算符完整分類與優先級(高→低)
- 後綴:
() [] -> . ++ --
- 一元:
++ -- + - ! ~ * & sizeof (type)
- 算術:
* / % → + -
- 移位:
<< >>
- 關係:
< <= > >=
- 相等:
== !=
- 位元 AND:
&
- 位元 XOR:
^
- 位元 OR:
|
- 邏輯 AND:
&&(短路)
- 邏輯 OR:
||(短路)
- 三元:
cond ? expr1 : expr2
- 賦值:
= += -= *= /= %= &= ^= |= <<= >>=
- 逗號:
expr1, expr2(值為 expr2)
關鍵型別與布爾語義
- C 無
bool(C99 _Bool,<stdbool.h> 提供 bool、true/false)。
- 任何非 0 值視為真,0 為假:
if (-1) 進入分支。
- 關係/邏輯運算結果:真→1,假→0(
int r = 5 > 3; // r==1)。
自增/自減副作用陷阱
int i = 1;
int a = i++ + ++i; // 未定義行為!同一序列點多次修改 i
int b = i++; // 獨立語句安全
int c = ++i; // 獨立語句安全
嚴禁在單一表達式中對同一變數多次修改或修改後又讀取。
逗號運算子實例
int a = 1, b = 2, c;
c = (a += 2, b *= 3, a + b); // 依序執行,c = 3 + 6 = 9
常見編譯警告建議
gcc -Wall -Wextra -Wpedantic -Wshadow -Wconversion -std=c11
-Wshadow:變數遮蔽
-Wconversion:隱式型別轉換可能溢位
快速查閱表:整數字面值後綴
| 後綴 | 型別 | 範例 |
| 無 | int → long → long long | 123 |
u/U | 無號對應型別 | 123u |
l/L | 至少 long | 123L |
ll/LL | 至少 long long | 123LL |