例如:
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)
我需要它,因为我想在预处理器之后解析源代码,我需要将一些宏花费到多于一行。 它甚至可能吗?怎么样?
答案 0 :(得分:0)
我不知道如何让预处理器在宏扩展中插入换行符。我想到的唯一解决方案是将特定字符串插入宏中,然后在预处理之后,用换行符替换这些字符串。
#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'| gcc -x c -