gpt4 book ai didi

c - 为什么 C 标准不允许您从函数返回值?

转载 作者:太空狗 更新时间:2023-10-29 17:27:16 24 4
gpt4 key购买 nike

我已经在 GCC 中成功编译并执行了以下代码:

#include <stdio.h>

int foo()
{

}

int main()
{
int i = 12345;
i = foo();
printf("i is: %d", i);
}

输出是:

i is: 0

因此 GCC 允许我不从函数 foo() 返回并使 foo() 返回 0

这种行为只适用于GCC还是其他C标准也有(据我了解,GCC不符合任何C标准)?

最佳答案

没有任何 C 标准要求编译器在函数缺少返回语句时产生错误或警告。

在所有 C 标准中,如果控制流在没有 return 的情况下到达非 void 函数的末尾,然后使用函数的返回值(如在您的代码中),则行为未定义.

因此,如果“允许”是指“将其指定为合法的、定义明确的行为”,则没有任何 C 标准允许您的代码。如果您的意思只是“不需要实现来产生错误”,那么它们都需要。

请注意,如果您更改 foo 的定义(无需添加 return ).你不能指望它是 0。没有规则说“如果没有返回,返回 0”——无论是在标准中还是在 GCC 的实现中。根据标准,它是未定义的,在 GCC 中,它就是当时返回寄存器中发生的任何事情。


¹ 在一般情况下,这是不可判定的。一个人可以做什么,例如Java 确实定义了规则,以便拒绝一些其他有效的函数定义,但没有一个 C 标准这样做。

关于c - 为什么 C 标准不允许您从函数返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50875716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com