5
我需要編寫一些代碼來驗證宏是否已定義但沒有任何值。測試不需要編譯時間。測試C宏的值是否爲空
我試圖寫:
#if (funcprototype == "")
MY_WARN("funcprototype is empty");
#endif
代碼不能編譯,因爲funcprototype
擴展到空。
我需要編寫一些代碼來驗證宏是否已定義但沒有任何值。測試不需要編譯時間。測試C宏的值是否爲空
我試圖寫:
#if (funcprototype == "")
MY_WARN("funcprototype is empty");
#endif
代碼不能編譯,因爲funcprototype
擴展到空。
如果運行時檢查是好的,那麼你可以測試stringized更換長度:
#define REAL_STRINGIZE(x) #x
#define STRINGIZE(x) REAL_STRINGIZE(x)
if (STRINGIZE(funcprototype)[0] == '\0') {
// funcprototype expanded to an empty replacement list
}
else {
// funcprototype expanded to a non-empty replacement list
}
我不認爲有一種普遍的情況「是這個宏通過替換爲空令牌序列「編譯時檢查。這是一個類似的問題,「是否可以比較兩個令牌的平等序列」,這在編譯時是不可能的。
該測試不需要編譯時測試,但是您想在`#if`指令中使用結果?如果`funcprototype`有一個非空的替換列表,但在替換後它會擴展爲空(由於重新掃描)。 – 2010-11-26 19:02:16
這似乎是http://stackoverflow.com/questions/4102351/test-for-empty-macro-definition – 2010-11-26 19:04:21