C中的MACRO执行步骤

时间:2018-12-11 07:29:46

标签: c function macros order-of-execution

我编写了以下代码来测试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()会被调用!

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

1 个答案:

答案 0 :(得分:2)

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

随着func1(30)被执行,宏fprintf()被执行,并且“少于50”被打印。现在,func1(30)的结果可用。

fprint()中的

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

它将按预期显示“ pop”,然后显示“ 30”。