【问题标题】:To where does the library functions in c return the value?c中的库函数将值返回到哪里?
【发布时间】:2014-07-25 02:31:18
【问题描述】:

最终,库函数将返回一个值。 谁捕获了这个返回值?

例如,考虑下面的代码。

#include<stdio.h>

main()
{
    printf("Waiting for a character to be pressed from the keyboard to exit.\n");

    getch();
    return 0;
}

getch() 返回一个值。谁来捕捉这个价值?

给我一​​般意义上的答案,而不是针对上述程序。

【问题讨论】:

  • 函数的调用者
  • 它在没有人注意到的情况下被创建和销毁。查看激活记录和堆栈帧。
  • 它会被丢弃而不是简单地使用。
  • 它是 Java,但我找不到 C 特定的副本。然而,这个概念是一样的:stackoverflow.com/questions/7281160/…

标签: c function return-value


【解决方案1】:

函数的返回值可以被丢弃。

在您提供的示例中,您可能没有注意到实际上printf 也有返回值。

在这种情况下,函数调用被评估为表达式语句,只有它的副作用发生,返回值被丢弃。表达式语句的另一个例子是:

21 + 21;

表达式21 + 21 被计算并丢弃。 C 允许这种语法,尽管编译器可能会对其进行优化。

【讨论】:

  • C 编译器确实非常积极地优化掉任何实际上是 NOP 的东西,包括不会产生副作用和不存储返回值的函数调用。
  • @aruisdante 哪个 C 编译器?编译器很难知道函数调用没有副作用。使用 C 链接模型,编译器可能不知道该函数没有副作用。
【解决方案2】:

答案是:没有人捕捉到价值。该值被简单地忽略/丢弃。

在您的具体示例中,printf 也返回一个值。它被丢弃了。然后getch 返回一个值。它也被丢弃了。事实上,C 语言中的每个表达式语句都涉及丢弃返回值(除非它是 void 表达式)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-15
    • 2014-02-26
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多