我想以某种方式弃用宏,即使在#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