将宏扩展为多行

时间:2015-02-01 10:42:37

标签: c macros c-preprocessor

例如:

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)

我需要它,因为我想在预处理器之后解析源代码,我需要将一些宏花费到多于一行。 它甚至可能吗?怎么样?

1 个答案:

答案 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 -