C 語言作為計算機科學的基石,其核心概念貫穿於操作系統、嵌入式開發、高性能計算等各個領域。本文梳理了從程序結構到預處理機制的高頻考點與實戰避坑指南,適合考試複習、面試熱身及日常查漏補缺。
main() 開始,有且僅有一個 main 函數,自上而下執行(遇分支跳轉、遇循環迭代)。sizeof 運算符返回類型/變量佔用字節數(編譯期確定)。預處理是編譯器處理源碼的第一步(.c → .i),不佔用運行時間,處理以 # 開頭的指令。
| 指令 | 用途 | 關鍵點 |
|---|---|---|
#define | 宏定義(無參/帶參) | 字符串替換而非計算;參數兩側加括號防運算符優先級錯誤;#undef 取消定義 |
#include | 文件包含 | <> 搜標準路徑,"" 先搜當前目錄;防止重複包含用 #ifndef/#define/#endif 或 #pragma once |
#ifdef/#ifndef/#if/#elif/#else/#endif | 條件編譯 | 編譯期裁剪代碼,減小體積、提高效率、實現跨平台 |
#pragma | 編譯器指導 | 如 #pragma pack(n) 設置對齊、#pragma warning 控制警告 |
#undef)__DATE__ // 編譯日期 "Mmm dd yyyy" __TIME__ // 編譯時間 "hh:mm:ss" __FILE__ // 當前源文件名 __LINE__ // 當前行號 (int) __func__ // 當前函數名 (C99) __STDC__ // 標準 C 符合性標識
調試神器:printf("Error at %s:%d in %s()\n", __FILE__, __LINE__, __func__);
| 知識點 | 核心結論 |
|---|---|
| 算法特性 | 可無輸入,必有輸出;有窮性、確定性、可行性 |
break 作用域 | 僅跳出最近一層 switch 或循環(for/while/do-while) |
| 運算符優先級 | 逗號運算符最低;賦值運算符倒數第二;單目 > 算術 > 移位 > 關系 > 邏輯 > 條件 > 賦值 > 逗號 |
| 整數提升 | char/short 參與運算自動提升為 int;float 傳參提升為 double (舊式聲明) |
| main 返回值 | 返回 0 表示成功,非 0 表示失敗(POSIX 標準) |
#define SQUARE(x) x*x → SQUARE(3+2) = 3+2*3+2 = 11。修正:#define SQUARE(x) ((x)*(x))。#ifdef DEBUG ... #endif 替代註釋掉代碼,一鍵切換發布/調試版。string.h (strcpy/strlen/strstr)、stdlib.h (atoi/malloc/free)、stdio.h (scanf/printf 格式控制)。學習建議:C 語言看似簡單,實則細節決定成敗。建議配合《C程序設計語言》(K&R)、《C專家編程》、《C陷阱與缺陷》經典著作,多寫代碼、多看預處理輸出 (
gcc -E)、多閱讀標準庫源碼實現。