我拿了一个用c写的项目,里面有很多宏。
我想使用一个新的宏来检查宏是否被激活。
但是符号#
在宏中是保留的。如何修复我的代码?谢谢:)
#define CHECK_MACRO( macro )\
#ifdef macro
printf("defined "#macro"\n");\
#else
printf("not defined "#macro"\n");\
#endif
最佳答案
您不能在宏中使用预处理器条件指令。一般来说,解决方案是将其彻底颠覆:使用条件指令在不同情况下以不同方式定义宏。但是,这不适用于您建议的通用宏测试宏,而且它还受到以下事实的限制:它确定条件是否在定义宏的位置成立,而不是在使用宏的位置成立。
你可能会感到安慰,因为这无论如何都不会起作用,因为类函数宏的参数在被替换到宏的替换文本之前被扩展了(除了几个不适用于代码关键部分的特殊情况)。
如果所有感兴趣的宏的可能值仅限于可能作为标识符出现或出现在标识符中的简短标记列表,则有一些替代方法可以工作。如果您可以选择一小部分您有兴趣测试的宏,则有不同的替代方案可能就足够了。没有任何替代方案可以完全通用地执行您建议的操作,除非您计算直接编写条件编译指令,而不使用宏,这实际上是实现它的常用方法。
关于c - 如何在宏中使用#ifdef ?'#' 后面没有跟宏参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58759122/