【问题标题】:MACRO execution steps in CC中的宏执行步骤
【发布时间】:2019-05-12 03:48:39
【问题描述】:

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

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

【问题讨论】:

  • fprintf 的调用取决于 func1(3) 的结果。您如何设想在func1 完成之前开始?

标签: c function macros order-of-execution


【解决方案1】:

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

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

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

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

【讨论】:

  • 我现在明白了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2021-11-22
相关资源
最近更新 更多