打印表达式并对其进行评估的宏(使用__STRING)

时间:2008-12-18 10:08:47

标签: c expression-evaluation

对于学习和演示,我需要一个宏打印其参数来评估它。我怀疑这是一个非常常见的情况,甚至可能是常见问题,但我找不到实际的参考资料。

我目前的代码是:

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))

然后:

PRINT(x & 0x01);

它工作正常,但我不确定__STRING宏的合法状态,特别是因为它位于私有__命名空间中。

所以,我的问题:

  1. 有没有更好的方法来编写这个宏?
  2. __STRING标准/伟大/邪恶?
  3. 如何使用现有的搜索工具查找__STRING? SO的搜索引擎只搜索包含字符串的任何内容: - (

2 个答案:

答案 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似乎工作正常。