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

我当前的代码是:

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

接着:

PRINT(x & 0x01);

它可以正常工作,但我不确定__String宏的法律状态,特别是因为它位于私人__名称空间中。

所以,我的问题:

  1. 有更好的方法写这个宏吗?
  2. __ String标准/伟大/邪恶吗?
  3. 如何使用现有的搜索工具查找有关__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)))

可能是您想要的。 #是弦乐操作员。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top