C语言中的宏执行步骤

C语言中的宏执行步骤,c,function,macros,order-of-execution,C,Function,Macros,Order Of Execution,我编写了以下代码来测试宏函数: #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() { fprin

我编写了以下代码来测试宏函数:

#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;
}
但我期待着这样的结果:

pop
less than 50
30
为什么文本出现在
弹出窗口
之前?函数
func1()
在它之后被调用

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

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

执行
func1(30)
时,将执行宏的
fprintf()
,并打印“小于50”。现在,
func1(30)
的结果可用

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

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

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

执行
func1(30)
时,将执行宏的
fprintf()
,并打印“小于50”。现在,
func1(30)
的结果可用

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


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

fprintf
的调用取决于
func1(3)
的结果。您认为如何在
func1
完成之前启动它?对
fprintf
的调用取决于
func1(3)的结果
。在
func1
完成之前,您认为如何启动它?我现在就知道了。谢谢!我现在就知道了。谢谢!
pop
less than 50
30