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

C 語言冷知識合集:宏定義、extern、static、puts/putchar 進階用法

     編輯:關於C語言

C 語言冷知識合集:宏定義、extern、static、puts/putchar 進階用法

C 語言細節決定成敗。本文整理幾個常被忽略但極實用的語法特性與標準庫函數差異,助你寫出更專業的程式碼。

1. 宏定義 #define vs typedef

#define NUMBER 5        // 文字替換,無類型檢查
#define STR "Hello"     // 可定義字串常數

typedef int int_wy;     // 類型別名,受編譯器類型系統管理
// int_wy 現在等同於 int,可用於宣告變數、參數、回傳型別

差異:#define 是前處理器單純文字替換;typedef 建立真正的類型別名,支援語意檢查。

2. 字串常數自動連接

puts("用過嗎?" "這麼會嗎?");
// 輸出:用過嗎?這麼會嗎?
// 兩個字串字面值相鄰時,編譯器自動合併為一個

3. puts vs printf vs putchar

函式用途特性
puts(s)輸出字串+自動換行不支援格式化,速度最快
printf(fmt, ...)格式化輸出功能最強,解析格式字串有開銷
putchar(c)輸出單一字元輸出單字元最高效

4. 轉義字元 \a (響鈴)

printf("他可發出響聲:\a\a\a \n"); // 蜂鳴器響三聲

5. extern 外部宣告

int array[5];          // 定義(配置記憶體)
extern int array[];    // 宣告(告知編譯器「別處有定義」)

若前已定義,後續 extern 多餘;跨檔案共用全域變數時必須在使用檔加 extern。

6. static 靜態儲存期

  • 區域 static:函式內保持值跨呼叫,初始化一次,儲存在資料段
  • 全域 static:限制連結可見性於本編譯單元(檔案級私有)

7. 字元常數與整數轉換

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 區域變數可替代全域變數,減少名稱汙染

這些「冷知識」在嵌入式開發、系統程式、高效能計算中尤為關鍵,熟練掌握能讓程式碼更健壯、可維護。

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