我想以某種方式棄用宏,即使在#if
語句中使用它時也會打印出良好的警告。在#if語句中使用宏時,打印棄用警告
This answer幾乎是我想要的,但在從#if
語句中訪問宏時會引發錯誤。
#include <stdio.h>
#define DEPRECATED_CONSTANT _Pragma ("GCC warning \"Deprecated constant!\"") 0
#define DEPRECATED_FUNCTION(...) _Pragma ("GCC warning \"Deprecated function!\"") printf(__VA_ARGS__)
int main() {
// Prints a warning (good)
int n = DEPRECATED_CONSTANT;
// Prints a warning (good)
DEPRECATED_FUNCTION("%d\n", n);
// Throws an error (bad)
#if DEPRECATED_CONSTANT
return 1;
#else
return 2;
#endif
}
的錯誤是:
error: missing binary operator before token "("
獎勵積分,如果你能找到我一個跨平臺兼容的解決方案!
編輯
我試圖妥善處理庫中的一個重大更改 - 我希望用戶有一個很好的,明確的警告(或錯誤)時,他們使用舊的宏,所以這將是清楚他們需要將他們的代碼遷移到使用新的宏。這些編譯指示解決方案只有在代碼中使用該常量的值時纔有效,而不是在預處理器指令中訪問該值時使用。
根據下面提供的答案,似乎沒有解決這個問題的方法(除了可能使用clang時?)。感謝大家。
您可以添加上下文。你想通過編寫'#if DEPRECATED_CONSTANT'來測試什麼?你想測試宏是否定義? – Stargateur
我想打印一個棄用警告,只要以任何方式使用宏。 –
我假設你的用例阻止你使用'#ifdef'? – DIMMSum