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

C語言巨集定義精選:實用技巧與常見模式大全

     編輯:關於C語言

核心巨集範例

巨集功能範例
UPCASE(c)小寫轉大寫UPCASE('a') → 'A'
DECCHECK(c)判斷十進位數字DECCHECK('5') → 1
HEXCHECK(c)判斷十六進位數字HEXCHECK('e') → 1
ARRAY_SIZE(arr)計算陣列元素數ARRAY_SIZE(int[10]) → 10
FPOS(type, field)結構成員偏移量FPOS(struct, member)
INC_SAT(val)防溢位遞增val = (val+1 > val) ? val+1 : val

預定義巨集

ANSI C 標準巨集:__LINE__、__FILE__、__DATE__、__TIME__、__func__(C99)、__STDC__。除錯追蹤極佳工具。

進階技巧:# 與 ## 運算子

字串化(#)

#define STR(s) #s
STR(hello) → "hello"

符號連接(##)

#define CONS(a,b) a##b
CONS(var, 1) → var1

匿名變數產生器

#define ANONYMOUS(type) type _anonymous##__LINE__
ANONYMOUS(static int) → static int _anonymous70;  // 第 70 行

利用多層巨集展開延遲 __LINE__ 解析。

結構填充

#define FILL(a) {a, #a}
enum ID {OPEN, CLOSE};
struct Msg {int id; const char* msg;};
struct Msg msgs[] = {FILL(OPEN), FILL(CLOSE)};
// 展開為 {{OPEN, "OPEN"}, {CLOSE, "CLOSE"}}

檔案名記錄

#define GET_FILE_NAME(f) #f
static char FILE_NAME[] = GET_FILE_NAME(__FILE__);

類型大小緩衝區計算

#define TYPE_BUF_SIZE(type) sizeof #type
char buf[TYPE_BUF_SIZE(INT_MAX)];  // → sizeof "0x7fffffff" → 11

防止頭檔重複包含

#ifndef HEADER_H
#define HEADER_H
// 內容
#endif

跨平台型別定義

typedef uint32_t uint32;  // 精確 32 位元無號整數
typedef int16_t int16;    // 精確 16 位元有號整數

建議使用 <stdint.h> 標準型別,避免自訂 byte/word/dword 造成混淆。

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