可以将代码字符串传递给C\C++ - 宏吗?

Sca*_*orn 4 c c++ macros

例如,我想制作一个调试宏,在尝试执行代码字符串之前打印代码字符串.我想它看起来应该是那样的

#define TRACE(string) printf("Trying to execute: %s\n",\"string\"); \
                      string

...

void foo() {
  printf("1\n");
}
void bar() {
  printf("2\n");
}

int main() {
  ...
  foo();
  TRACE(bar(););
  ...
}
Run Code Online (Sandbox Code Playgroud)

预期产量

...
1
Trying to execute: bar();
2
...
Run Code Online (Sandbox Code Playgroud)

好吧,这不是人们如何做到的:编译器抱怨非法语法.有没有办法做到这一点?

m.s*_*.s. 11

你需要使用字符串化#:

#define TRACE(string) printf("Trying to execute: %s\n",#string); \
                      string
Run Code Online (Sandbox Code Playgroud)

完整示例:

#include <stdio.h>

#define TRACE(string) printf("Trying to execute: %s\n",#string); \
                          string

void foo() {
  printf("1\n");
}
void bar() {
  printf("2\n");
}

int main() {

  foo();
  TRACE(bar(););
}
Run Code Online (Sandbox Code Playgroud)

输出:

1
Trying to execute: bar();
2
Run Code Online (Sandbox Code Playgroud)

live example on ideone


Yve*_*ust 8

您必须使用"stringification"运算符#,这将导致替换"string".

#define TRACE(string) printf("Trying to execute: %s\n", #string); \
                      string
Run Code Online (Sandbox Code Playgroud)