【问题标题】:integer function with no return value [duplicate]没有返回值的整数函数[重复]
【发布时间】:2019-07-19 10:32:59
【问题描述】:

我正在尝试执行以下代码,因为该函数没有返回值,但它是用整数返回类型定义的。它是如何在没有任何错误的情况下运行的。

#include <stdio.h>
int fn(int a, int b){
  int temp = b;
  a = 2*temp;
  b = a;
}
int main()
{
  int x,y,printval;
  scanf("%d%d",&x,&y);
  printval = fn(x,y);
  printf("%d", printval);
  return 0;
}

我预计输出是错误的,但结果是 40(input:10,20)

【问题讨论】:

  • 在 C++ 中,返回正确的值取决于您。如果您不返回任何值,则没有错误。它可以被视为未定义的行为。在这种情况下,很可能返回了存储在 eax 注册表中的当前值(很可能是临时值)

标签: c++ c c++11


【解决方案1】:

您的代码具有未定义的行为,这意味着一切皆有可能;你根本不应该依赖它。

[stmt.return]/2

(强调我的)

从构造函数、析构函数或具有 cv void 返回类型的非协程函数的末尾流出等效于没有操作数的 return否则,从 main 或协程 ([dcl.fct.def.coroutine]) 以外的函数的末尾流出会导致未定义的行为

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 2011-08-17
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2015-01-06
    相关资源
    最近更新 更多