用于打印的宏功能

gre*_*een 0 c printing macros function

如果我有:

#define PRINT(x) fprintf(stderr, x);
Run Code Online (Sandbox Code Playgroud)

并在代码中我追加它:

 PRINT(("print this")) 
Run Code Online (Sandbox Code Playgroud)

输出是:[打印此]

如果我追加它:

 PRINT(("print %s", "this"))
Run Code Online (Sandbox Code Playgroud)

输出是:[this]

有人可以解释为什么它只接收"this"参数而不是整个字符串?

小智 6

PRINT(("print %s", "this"))
Run Code Online (Sandbox Code Playgroud)

变为:

fprintf(stderr, ("print %s", "this"));
Run Code Online (Sandbox Code Playgroud)

这相当于:

fprintf(stderr, "this");
Run Code Online (Sandbox Code Playgroud)

但是,可变参数宏(来自C99)可以工作:

#define PRINT(...) fprintf(stderr, __VA_ARGS__)

int main() {
  PRINT("print %s", "this");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)