我想要一个像这样工作的调试函数宏:
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);
这可能吗?
答案 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”);