C中的MACRO执行步骤

MACRO execution steps in C

我写了下面的代码来测试MACRO函数:

#define err_exit(a, b) {fprintf(stdout,"%s\n",(a)); return (b); }

int func1(int a){
    if(a<50)
        err_exit("less than 50", a);
    if(a>50)
        err_exit("greater than 50", a);

    return 0;
}

int main() {
    fprintf(stdout, "\npop\n%d\n",func1(30));
    return 0;
}

输出为:

less than 50

pop
30

但我期待这个输出:

pop
less than 50
30

为什么文本出现在 pop 之前?函数 func1() 在它之后被调用!

宏如何替换主代码中的指令?

首先调用func1(30),这样就可以执行了,应该会产生结果。 main() 中的 fprint() 需要该结果,以便它可以打印其内容。

func1(30) 被执行时,宏的 fprintf() 被执行,并且 "less than 50" 被打印。现在,func1(30) 的结果可用。

fprint() of main() 现在可以继续打印了(因为它拥有所需的一切(即 func1(30) 的结果)。

它将打印 "pop",然后按预期打印“30”。