打印表达式并评估它的宏(使用__String)
-
22-08-2019 - |
题
对于学习和演示,我需要一个打印其参数的宏 和 评估它。我怀疑这是一个非常普遍的情况,甚至可能是常见问题解答,但我找不到实际参考。
我当前的代码是:
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))
接着:
PRINT(x & 0x01);
它可以正常工作,但我不确定__String宏的法律状态,特别是因为它位于私人__名称空间中。
所以,我的问题:
- 有更好的方法写这个宏吗?
- __ String标准/伟大/邪恶吗?
- 如何使用现有的搜索工具查找有关__String的信息?因此,搜索引擎只是搜索包含字符串的任何内容:-(
解决方案
您可以使用将其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)绝对不是标准的,这是我第一次遇到它;毫不奇怪,因为它似乎并没有比上面的宏观()宏观的做法要多得多。
3) 谷歌 似乎正常。
其他提示
就像是
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))
可能是您想要的。 #是弦乐操作员。
不隶属于 StackOverflow