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