gpt4 book ai didi

c - 将宏扩展为多于一行

转载 作者:行者123 更新时间:2023-11-30 19:44:24 24 4
gpt4 key购买 nike

例如:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com