对于学习和演示,我需要一个宏打印其参数和来评估它。我怀疑这是一个非常常见的情况,甚至可能是常见问题,但我找不到实际的参考资料。
我目前的代码是:
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))
然后:
PRINT(x & 0x01);
它工作正常,但我不确定__STRING宏的合法状态,特别是因为它位于私有__命名空间中。
所以,我的问题:
答案 0 :(得分:12)
像
这样的东西#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))
可能就是你想要的。 #是字符串化运算符。
答案 1 :(得分:10)
您可以使用#preprocessor令牌将其RHS参数转换为字符串文字:
#include <stdlib.h>
#include <stdio.h>
#define STR(x) #x
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", STR(expr), (expr)))
int main(void)
{
int x = 7;
PRINT(x & 0x01);
return EXIT_SUCCESS;
}
2)这绝对不是标准,这是我第一次遇到它;这并不奇怪,因为它似乎没有比上面的STR()宏做得更多,乍一看。
3)Google似乎工作正常。