在#define函数宏中使用符号名称作为字符串文字

时间:2012-03-25 04:09:37

标签: c c-preprocessor

我想要一个像这样工作的调试函数宏:

int myVar = 5;
PRINTVAR(myVar); // macro

// which expands to something like...
print("myVar: ");
println(myVar);

基本上,我想将标识符用作字符串文字和变量。

当我想将大量变量转储到stdout时,我只是有点厌烦重复自己。

我的愚蠢尝试,当然不起作用:

#define PRINT_VAR(x) Serial.print("x: "); Serial.println(x);

这可能吗?

3 个答案:

答案 0 :(得分:10)

“stringizing operator”就是针对这种情况而设计的:

#define PRINT_VAR(x) (print(#x ": "), println(x))

答案 1 :(得分:2)

查看stringifying operator,#,当您使用前缀为此的宏ID时,它会将其作为字符串而不是展开它。

答案 2 :(得分:0)

给你的代码示例,我不知道你是在谈论C还是Java。但是,我将在C:

中做
#define DEBUG(X, ...) fprintf(x, __VA_ARGS__);

使用它:

DEBUG(srderr,“我的错误\ n”);