例如:
void foo();
void bar();
#define CALC(a) \
do{ \
if(a){ \
foo();} \
else{ \
bar(); \
} \
}while(false)
bool a = false;
void ree(){
CALC(a);
}
上面的例子相当于:
#define CALC (a) if(a){ foo(); } else{ bar(); }
if(a){ foo(); } else{ bar(); }
我正在寻找一种将宏扩展到多于一行的可能性。例如:
void ree(){
bool a = false;
do{
if(a)
{
foo();
}
else
{
bar();
}
}while(false)
我需要它,因为我想在预处理器之后解析源代码,并且我需要将一些宏扩展到不止一行。 有可能吗?如何?
最佳答案
我不知道有什么方法可以让预处理器在宏扩展中插入换行符。我想象的唯一解决方案是在宏中插入特定的字符串,然后在预处理后,用换行符替换这些字符串。
#define CALC(a) NEWLINE\
do{ NEWLINE\
if(a){ NEWLINE\
foo();} NEWLINE\
else{ NEWLINE\
bar(); NEWLINE\
} NEWLINE\
bool a = false;
void ree(){
CALC(a)
}
如果您使用的是 Linux,则可以使用以下命令进行编译:
gcc -E t.c | sed -e 's/NEWLINE/\n/g' | sed -e 's/NEWLINE/\n/g' | gcc -x c -
关于c - 将宏扩展为多于一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28261800/