【问题标题】:Why main ignores the returning value of the user defined function为什么main忽略用户定义函数的返回值
【发布时间】:2021-10-28 23:49:54
【问题描述】:

我们都知道return语句结束被调用函数的执行并向调用函数返回一些值,但是在下面给出的情况下,我不接受用户定义函数通过任何变量或作为另一个函数中的参数,例如 printf 那么为什么 main 打印 Hello ,根据我的想法 main 的执行应该在打印 5 后结束,因为 0 返回给它,我已经搜索过了在各种平台上,但他们只是说 main 忽略返回的值(但为什么以及如何?)

#include <stdio.h>

//Compiler version gcc  6.3.0

int main()
{ 
  printf("%d\n",6);
  Array();
  printf("Hello\n");
  return 0;
}

int Array()
{
  int c=5;
  printf("%d\n",c);
  return 0;
}

【问题讨论】:

  • 当某些函数返回0 时,为什么main 会结束?返回任何值都没有问题。
  • 有趣的是,您关注的是Array(),但您的代码更频繁地忽略了printf 的返回值——这就是它的工作原理。如果不使用返回值,则会被忽略。
  • 也要注意编译器警告,代码格式不正确。
  • Array() 在被调用之前是未知的。这是一个坏主意,在现代 C 中是被禁止的
  • 返回 0 from main 和返回 0 to main 之间有很大的不同。 main 中的语句return 0; 将导致 main 在该点结束,因为您正在返回 0 from main。但是Array函数中的return 0;只会导致Array函数结束。它不会对 main 产生任何影响,因为您正在返回 0 到 main,而 main 只是忽略返回的值。

标签: c return return-value


【解决方案1】:

return 0; 行只结束它所属的函数。在Array() 中,它将结束Array() 函数的执行,仅此而已。 main 忽略返回值的事实与此无关。但是要回答“为什么以及如何”,它会忽略它-您没有告诉main您要将Array()的返回值存储在哪里,因此它不会将其存储在任何地方。
如果您说int a = Array();,那么main 会知道将其存储在变量a 中。但是如果你只是调用Array();,那么main 不会将返回值存储在任何地方,因此你可以说它忽略了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-02
    • 2020-12-17
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 2019-02-12
    • 2022-08-03
    • 2019-10-14
    相关资源
    最近更新 更多