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

C 語言巨集技巧:多次包含同一頭文件生成不同內容

     編輯:關於C

場景

同一頭文件 funcs.h,經由不同巨集定義多次 #include,產生不同程式碼片段(如枚舉值、函數宣告、字串表)。

funcs.h 內容

/* funcs.h */
FUNC_1(ID_FUN1_001)
FUNC_1(ID_FUN1_002)
FUNC_2(ID_FUN2_001)
FUNC_2(ID_FUN2_002)

第一次包含:生成 enum aaa

#define FUNC_1(opt) opt,
#define FUNC_2(opt)       // 空

enum aaa {
    #include "funcs.h"
    ID_FUN1_END
};
#undef FUNC_1
#undef FUNC_2

展開後:

enum aaa {
    ID_FUN1_001,
    ID_FUN1_002,
    ID_FUN1_END
};

第二次包含:生成 enum bbb

#define FUNC_1(opt)       // 空
#define FUNC_2(opt) opt,

enum bbb {
    #include "funcs.h"
    ID_FUN2_END
};
#undef FUNC_1
#undef FUNC_2

展開後:

enum bbb {
    ID_FUN2_001,
    ID_FUN2_002,
    ID_FUN2_END
};

核心技巧總結

  • 頭文件僅包含巨集調用,無實際程式碼。
  • 每次 #include 前重新定義巨集行為。
  • 用 #undef 清理,避免汙染後續編譯。
  • 適用於:枚舉/字串表/函數表/消息 ID 同步生成。

延伸:X Macro 更完整範例

/ * ops.def * /
OP(ADD, "+")
OP(SUB, "-")
OP(MUL, "*")
OP(DIV, "/")

/ * 使用 * /
#define OP(name, sym) name,
typedef enum { #include "ops.def" } OpCode;
#undef OP

#define OP(name, sym) sym,
const char *op_str[] = { #include "ops.def" };
#undef OP
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved