C 語言細節決定成敗。本文整理幾個常被忽略但極實用的語法特性與標準庫函數差異,助你寫出更專業的程式碼。
#define vs typedef#define NUMBER 5 // 文字替換,無類型檢查 #define STR "Hello" // 可定義字串常數 typedef int int_wy; // 類型別名,受編譯器類型系統管理 // int_wy 現在等同於 int,可用於宣告變數、參數、回傳型別
差異:#define 是前處理器單純文字替換;typedef 建立真正的類型別名,支援語意檢查。
puts("用過嗎?" "這麼會嗎?");
// 輸出:用過嗎?這麼會嗎?
// 兩個字串字面值相鄰時,編譯器自動合併為一個
puts vs printf vs putchar| 函式 | 用途 | 特性 |
|---|---|---|
puts(s) | 輸出字串+自動換行 | 不支援格式化,速度最快 |
printf(fmt, ...) | 格式化輸出 | 功能最強,解析格式字串有開銷 |
putchar(c) | 輸出單一字元 | 輸出單字元最高效 |
\a (響鈴)printf("他可發出響聲:\a\a\a \n"); // 蜂鳴器響三聲
extern 外部宣告int array[5]; // 定義(配置記憶體) extern int array[]; // 宣告(告知編譯器「別處有定義」)
若前已定義,後續 extern 多餘;跨檔案共用全域變數時必須在使用檔加 extern。
static 靜態儲存期static:函式內保持值跨呼叫,初始化一次,儲存在資料段static:限制連結可見性於本編譯單元(檔案級私有)char c = 'A'; // 等同於 65 (ASCII) int i = c; // 隱性轉換為整數
const 或 enum 替代 #define(有類型、可除錯)puts,單字元用 putchar,提升 I/O 效能.h 寫 extern int g_val;,.c 定義 int g_val;static 區域變數可替代全域變數,減少名稱汙染這些「冷知識」在嵌入式開發、系統程式、高效能計算中尤為關鍵,熟練掌握能讓程式碼更健壯、可維護。