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

bor*_*yer 6 c expression-evaluation

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

我目前的代码是:

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))
Run Code Online (Sandbox Code Playgroud)

然后:

PRINT(x & 0x01);
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我不确定__STRING宏的合法状态,特别是因为它在private __命名空间中.

所以,我的问题:

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

cod*_*gic 13

就像是

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))
Run Code Online (Sandbox Code Playgroud)

可能就是你想要的.#是字符串化运算符.


aib*_*aib 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;
}
Run Code Online (Sandbox Code Playgroud)

2)这绝对不是标准,这是我第一次遇到它; 这并不奇怪,因为它似乎没有比上面的STR()宏做得更多,乍一看.

3)谷歌似乎工作正常.