我编写了以下代码来测试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()
会被调用!
宏如何替换主代码中的指令?
答案 0 :(得分:2)
首先,调用func1(30)
,以便可以执行它,并产生结果。 fprint()
中的main()
需要该结果,以便它可以打印其内容。
随着func1(30)
被执行,宏fprintf()
被执行,并且“少于50”被打印。现在,func1(30)
的结果可用。
fprint()
中的 main()
现在可以继续打印(因为它具有所需的一切(即func1(30)
的结果)。
它将按预期显示“ pop”,然后显示“ 30”。