我必須維護具有通用組件和產品特定組件的C代碼。我想簡化我的代碼,這樣我只有一個通用product.h文件,其中有像C預處理器計算特定產品包括
#if (PRODUCT_ID == 1)
#define PRODUCT_NAME Product1
#else
#if (PRODUCT_ID == 2)
#define PRODUCT_NAME Product2
#else
#error "Unsupported product id"
#endif
#endif
的結構之後,每當我有一個頭foo.h中其中有產品的具體成分,我想用的語法像這樣
#include "product.h"
#include PRODUCT_SPECIFIC_INCLUDE
其中PRODUCT_SPECIFIC_INCLUDE
應從__FILE__
導出和PRODUCT_NAME
宏這樣一種方式,它會轉化爲
#include "Product1/foo.h"
也就是說,產品特定的頭文件與通用文件具有相同的文件名,但位於產品特定的文件夾中,其名稱爲值爲PRODUCT_NAME
的宏。
看來,無論我嘗試有預處理器字符串化問題。我不能成爲第一個想要這樣的結構的人。我錯過了什麼?
更新
這是我目前有PRODUCT_SPECIFIC_INCLUDE
不工作
#define TOKENPASTE(x, y) x ## y
#define TOKENPASTE2(x, y) TOKENPASTE(x, y)
#define PRODUCT_SPECIFIC_INCLUDE TOKENPASTE2(PRODUCT_SPECIFIC, __FILE__)
我不確定有可能使用標準的C預處理器。相反,您可能必須在構建環境中執行此操作。 –
請顯示與'PRODUCT_SPECIFIC_INCLUDE'相關的宏 –
這是我目前對'PRODUCT_SPECIFIC_INCLUDE'不起作用的宏,它不起作用
#define TOKENPASTE(x, y) x ## y #define TOKENPASTE2(x, y) TOKENPASTE(x, y) #define PRODUCT_SPECIFIC_INCLUDE TOKENPASTE2(PRODUCT_SPECIFIC, __FILE_\_)
–