我正在構建一個可以由第三方擴展的后端介面,并且我希望盡可能容易地添加一個新的后端模塊。
為此,我想通過只需要向 X 宏添加一個條目來自動包含未知頭檔案:
store.h:
#define BACKEND_TBL \
ENTRY(HTABLE, "store_htable.h", htstore, htiter) \
ENTRY(MDB, "store_mdb.h", mdbstore, mdbiter)
/* Add more here */
typedef enum store_type {
#define ENTRY(a, b, c, d) STORE_##a,
BACKEND_TBL
#undef ENTRY
} StoreType;
store.c:
#include "store.h"
#define ENTRY(a, b, c, d) #include b
BACKEND_TBL
#undef ENTRY
我收到一個錯誤:# is not followed by a macro parameter。
我試圖逃避#之前,#include因為那是一個字串化標記,但仍然無法作業。
這在C語言中甚至可能嗎?
uj5u.com熱心網友回復:
不,這是不可能的。雖然你可以說,#define MYHDR <header.h>然后#include MYHDR,宏替換是在對前處理器命令進行詞法分析之后執行的。如果你這樣做了#define INCLUDE_FOO #include <foo.h>(并且以某種方式通過前處理器而不是將其視為字串化),那么添加INCLUDE_FOO只會導致#include <foo.h>后前處理器源中的文本,這會在編譯時導致語法錯誤。
uj5u.com熱心網友回復:
或者,您可以這樣做,使用宏來控制定義塊,
#ifdef USE_HTABLE
#include <htabl.h>
#endif
#ifdef INCLUDE_MDB
#include <MDB.h>
#endif
當你需要做的時候,
#define INCLUDE_MDB
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448237.html
上一篇:在掩蔽操作期間保留符號
下一篇:C中ifelse陳述句的問題
