例如,我想制作一个调试宏,在尝试执行代码字符串之前打印代码字符串.我想它看起来应该是那样的
#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)
您必须使用"stringification"运算符#,这将导致替换"string".
#define TRACE(string) printf("Trying to execute: %s\n", #string); \
string
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |