【问题标题】:Evaluation Order of Operands操作数的求值顺序
【发布时间】:2014-10-17 08:56:12
【问题描述】:

以下程序在 C 中的输出是什么?我基本上很困惑 main() 是先调用 t1() 还是 t2()。

#include <stdio.h>

int a=40;
int t1()
{
    int a=20;
    return a;
}
int t2()
{
    int a=30;
    return a;
}
int main()
{
    int k=t1() + t2();
    printf("%d",k);
    return 0;
}

【问题讨论】:

  • 它还没有决定先调用哪个。在这种情况下与小费相同。
  • 您是否打算更改函数中的全局变量 a?
  • 不完全是我试图弄清楚函数调用的评估顺序是什么,即 t1()+t2(),评估的顺序是否未定义??如果有 r 三个函数怎么办即 t1()+t2()+t3(),在这种情况下,评估的顺序是什么?

标签: c operator-precedence order-of-execution


【解决方案1】:

由于所有函数都返回局部变量的值,因此您的代码与此相同:

int a = 40;

int t1() { return 20; }
int t2() { return 30; }

int main() { printf("%d", t1() + t2()); }

或者,更简单:

int a = 40;
int main() { printf("%d", 20 + 30); }

或者更简单:

int a = 40;
int main() { fputs("50", stdout); }

在第一个版本中,首先计算哪个函数调用子表达式既未指定也不相关。

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    相关资源
    最近更新 更多