C 使用返回类型定义的函数没有返回语句? #包括 内部主(空) { printf(“你好,世界”\n); }

C 使用返回类型定义的函数没有返回语句? #包括 内部主(空) { printf(“你好,世界”\n); },c,C,在上面的代码(最初显示为a)中,main函数的返回类型是int,但我们不在该函数中返回任何值。 即使没有return语句,该函数也可以工作 这怎么可能呢?这是为了使代码与C的早期阶段兼容 C编译器隐式地为您执行此操作。:) i、 e 到目前为止,它的定义很明确 §5.1.2.2.3计划终止 到达终止main函数的}返回值0 在C99和中,标准规定: 5.1.2.2.3程序终止 如果main函数的返回类型与int兼容,则从 对main函数的初始调用相当于使用值调用exit函数 由main函数返回作

在上面的代码(最初显示为a)中,
main
函数的返回类型是
int
,但我们不在该函数中返回任何值。 即使没有return语句,该函数也可以工作


这怎么可能呢?

这是为了使代码与C的早期阶段兼容

C编译器隐式地为您执行此操作。:) i、 e

到目前为止,它的定义很明确

§5.1.2.2.3计划终止

到达终止
main
函数的
}
返回值0

在C99和中,标准规定:

5.1.2.2.3程序终止 如果
main
函数的返回类型与
int
兼容,则从 对
main
函数的初始调用相当于使用值调用
exit
函数 由
main
函数返回作为其参数;11) 到达终止请求的
}
main
函数返回值0。如果返回类型与
int
不兼容,则 返回到主机环境的终止状态未指定


11) 根据6.2.4,在
main
将在前一种情况下结束,即使在后一种情况下不会结束

C90中没有类似规定。如果您从C90程序中的
main()。代码仍然有效,但是像shell这样的程序无法可靠地检测程序是否成功

ISO/IEC 9899:1990

5.1.2.2.3程序终止 从初始调用返回到
main
函数相当于调用
exit
函数 将
main
函数返回的值作为其参数。如果
main
函数执行不指定值的返回,则返回到主机环境的终止状态未定义

6.6.6.4
返回
语句 ^3如果执行不带表达式的返回语句,并且调用方使用函数调用的值,则行为未定义。到达终止函数的
}
相当于执行不带表达式的
return
语句

本段不在本文件中

因此,如果您的编译器支持C99或C11,则删除
main()
的结尾相当于
返回0但C99之前的情况并非如此。我相信这样做是为了符合C++98(基本上具有相同的规则)以及其他任何原因


就我个人而言,我不喜欢这个规则,我的
main()
程序通常结束
返回0

main
是特殊的。欢迎来到Stack Overflow(堆栈溢出),请带上标签阅读。请不要张贴代码图片,张贴实际代码。如果图片被删除,这个问题就会变成废话,因为没有人会知道你在说什么@Pablo这不是关于图像链接的消亡,而是关于人们不能复制代码和测试自己,也不能在数据库中搜索内容code@L对我来说,两者都有关系。如果图片消失了,而另一个用户在功能中发现了这个问题,那么这将是浪费时间,因为代码消失了,这个问题没有意义。它如何保持代码兼容,以及与C的哪个早期阶段兼容?该规则与最早版本的C标准C90不兼容。它只适用于标准的旧版本(C99)和当前版本(C11),我也不喜欢它。它给人的印象是错误的,比如OP
#include <stdio.h>

int main(void)
{
    printf("Hello, World\n");
}
return 0;