// 註釋、stdint.h、inline、restrict、VLA、_Bool、long long、指定初始化器。_Generic、_Atomic、_Thread_local、alignas/alignof、多執行緒、邊界檢查介面。typeof、nullptr、[[attributes]]、constexpr、#embed 等現代化特性。建議:專案鎖定 -std=c11 或 -std=c17,避免 GNU 擴展污染可移植性。
| 規則 | 說明 |
|---|---|
| 字符集 | 字母、數字、底線;首字符不能是數字 |
| 大小寫敏感 | BOOK ≠ book |
| 長度限制 | 標準無限制,編譯器通常前 31/63 字符有效 |
| 保留字 | 不可作標識符(見下表) |
| 命名風格 | 變數/函數 snake_case、常量 UPPER_SNAKE、類型 PascalCase |
auto break case char const continue default do double else enum extern float for goto if inline int long register restrict return short signed sizeof static struct switch typedef union unsigned void volatile while _Alignas _Alignof _Atomic _Bool _Complex _Generic _Imaginary _Noreturn _Static_assert _Thread_local
分類:
int、double、struct...if、for、switch...static、extern、register...sizeof、typedef、const...() [] -> . // 後綴/成員存取,左結合 ++ -- + - ! ~ * & (type) sizeof // 一元,右結合 * / % // 乘除模,左結合 + - // 加減,左結合 << >> // 移位,左結合 < <= > >= // 關係,左結合 == != // 相等,左結合 & // 位元 AND,左結合 ^ // 位元 XOR,左結合 | // 位元 OR,左結合 && // 邏輯 AND,左結合 || // 邏輯 OR,左結合 ?: // 三元,右結合 = += -= *= /= %= &= ^= |= <<= >>= // 賦值,右結合 , // 逗號,左結合
口訣:單目>算術>移位>關係>相等>位元>邏輯>三元>賦值>逗號。
for 多初始化/增量。int a ≠ inta)。{} 區塊結尾不加分號。| 類別 | 範例 | 說明 |
|---|---|---|
| 整數常量 | 123, 0173 (八進位), 0x7B (十六進位), 123L (long), 123ULL (unsigned long long) | 後綴指定型別 |
| 浮點常量 | 3.14, 1e-5, 3.14f (float), 3.14L (long double) | 預設 double |
| 字符常量 | 'a', '\n', '\x41', L'中' (寬字符) | 單引號,整數型別 |
| 字串常量 | "hello", L"世界" (寬字串) | 雙引號,以 \0 結尾,唯讀記憶體 |
| 符號常量 | #define PI 3.14159, enum {RED, GREEN} | 預處理/編譯期常量 |