本文繼續探討C語言編程中的核心習慣,涵蓋變數命名規範、參數傳遞策略、靜態儲存類別特性、遞歸與非遞歸轉換、全域變數使用原則、內部函數封裝、密碼輸入隱藏、字元輸出行為、檔案關閉時機、文字模式定位陷阱、高階檔案API優勢、檔案句柄命名、重命名/刪除操作前置條件等實戰要點。
int max_retry_count; 優於 int mrc;,減少註釋需求。user_age),巨集/常數全大寫(MAX_BUFFER),型別/結構體標籤大寫開頭(struct Node)。userName)或下劃線(user_name),專案統一風格。int, float, char 等)與函數物件適合傳值。const StructType ¶m):
C語言無原生引用,模擬方式:void func(const BigStruct *const ptr)(指標本身const + 指向資料const)。
static 修飾的變數(全域或區域)在編譯階段完成儲存分配與初始化。若未顯式初始化,某些編譯器可能報錯或產生不定值。
強制規範:宣告靜態變數時必須顯式初始化。
static int counter = 0; // 正確
static const char *msg = "OK"; // 正確
static int bad; // 危險!嚴禁
只有當絕大多數函數都需要存取某資料時,才考慮全域變數。少數函數需求時,透過參數傳遞,保持模組低耦合、高內聚。
static void internal_helper() 僅在本編譯單元可見。| 場景 | 技巧 | 說明 |
|---|---|---|
| 密碼輸入 | getch() | 無回顯讀取字元,實現密碼隱形輸入 |
| 字元輸出換行 | putchar/putch | 超出視窗右邊界自動換行;視窗滿時整體上捲 |
| 檔案關閉 | 顯式fclose() | 程式異常結束可能導致緩衝區資料未刷入磁碟,造成資料遺失 |
| 文字模式定位 | 慎用fseek | 文字模式下 \r\n 視為兩字元,fseek 偏移計算易出錯 |
| 高階檔案API | 優先fopen/fgetc | 標準庫函數可讀性強,利於團隊協作維護 |
| 檔案句柄命名 | 全大寫 | FILE *FP_LOG; 與變數區分,提升可讀性 |
| 重命名檔案 | rename()前必須fclose() | 開啟狀態下重命名行為未定義;跨權限目錄重命名不提升權限 |
| 刪除檔案 | remove()前必須fclose() | 同理,開啟檔案無法安全刪除 |
細節決定成敗。將命名規範、參數策略、靜態初始化、遞歸權衡、全域克制、static封裝、資源管理(檔案關閉)內化為編碼直覺,是從「能跑」邁向「專業、可維護」的關鍵一步。