首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C 語言語法完整指南:從識別符到函數定義

     編輯:C 語言問答

C 語言核心語法結構一覽

C 語言語法嚴謹且精簡,掌握以下六大類別即可覆蓋 90% 以上的日常開發需求。

1. 識別符命名規則

  • 由字母(A-Z, a-z)、數字(0-9)、底線(_)組成。
  • 首字元必須為字母或底線,區分大小寫(count ≠ Count)。
  • 長度限制視編譯器而定,現代編譯器通常支援 31 字元以上(C99 標準建議至少 63 字元)。
  • 避免使用關鍵字(int, while 等)及保留字(以雙底線或底線+大寫開頭)。

2. 註釋風格

  • 區塊註釋: /* ... */ —— 不可巢狀嵌套,可跨行,可置於程式碼任意位置。
  • 單行註釋(C99+): // ... —— 至行尾結束,推薦用於簡短說明。

3. 常量分類與表示

類別範例說明
整數常量123, 0173 (八進位), 0x7B (十六進位), 123L (長整數)後綴 U/u 表無號,L/l 表長整數
字元常量'A', '\n', '\x41'單引號括起,可用跳脫序列
字串常量"Hello", "Line1\nLine2"雙引號括起,編譯器自動在末尾補 \0
浮點常量3.14, 1.2e-3, .5f (float)預設為 double,f/F 後綴指定 float

4. 表達式類型

  • 算術表達式: 整數/實數運算,隱含型別轉換遵循「整數提升 → 算術轉換」規則。
  • 邏輯表達式: 使用 &&, ||, !,結果為 int(0 或 1),具短路求值特性。
  • 位元運算表達式: &, |, ^, ~, <<, >>,僅適用整數型別。
  • 強制型別轉換: (type)expr,慎用,可能導致資料截斷或未定義行為。
  • 逗號表達式: expr1, expr2,按序求值,整體值為最後一個子表達式的值。
  • 賦值表達式: lvalue = rvalue,右結合,可鏈式賦值(a = b = 0)。
  • 條件表達式: cond ? expr1 : expr2,三元運算子,結果型別由兩分支協商決定。
  • 指標表達式: 指標算術(p+1)、解引用(*p)、取址(&x)、成員存取(p->m)。

5. 資料定義與儲存類別

儲存類別  型別標識符  變數列表;
  • 型別標識符: int, short, long, unsigned, char, float, double, struct Tag, union Tag, enum Tag, 自訂 typedef 名稱。
  • 儲存類別:
    • auto(預設,區域變數,棧上分配)
    • register(建議存入暫存器,不可取址)
    • static(靜態存續期,區域保持值,全域限定連結)
    • extern(外部連結宣告,不分配儲存空間)
    • _Thread_local (C11,執行緒區域儲存)
  • 規則: 檔案作用域(全域)只能用 static 或 extern;函數參數預設為 auto;register 不可用於陣列或結構體。

6. 函數定義結構

儲存類別  回傳型別  函數名(參數列表)
{
    區域變數宣告;
    陳述句序列;
    return 運算式;  // 無回傳值函數可省略或 return;
}
  • 儲存類別僅能為 extern(預設,外部連結)或 static(內部連結,僅本檔可見)。
  • 參數列表為 void 表示無參數;舊式 K&R 風格(參數宣告在大括號前)已棄用,請使用 ANSI C 原型宣告。
  • 函數體為複合陳述句(大括號包圍),可包含巢狀區塊。

7. 變數初始化規則

  • 靜態/全域變數: 未顯式初始化時,數值型自動歸零(0/0.0),指標為 NULL,字元為 '\0',結構體/聯合體/陣列遞迴歸零。
  • 自動/暫存器變數: 未初始化則值為不定(垃圾值),必須在使用前賦值。
  • 初始化語法: 標量用 = value;陣列/結構體用 { ... } 巢狀列表,支援指定初始化器(C99:int a[10] = {[5] = 10})。
  • 限制: 只有靜態/全域陣列可在宣告時初始化(C89);C99 允許自動陣列初始化,但不可為變長陣列(VLA)。

提示: 現代 C 開發建議遵循 C99/C11 標準,啟用編譯器警告(-Wall -Wextra -pedantic),並善用靜態分析工具(Clang Static Analyzer、Cppcheck)捕捉潛在問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved