gpt4 book ai didi

c - 为什么我看到这么多 C 代码省略了 main 的返回类型?为什么它有效?

转载 作者:太空宇宙 更新时间:2023-11-04 00:21:01 27 4
gpt4 key购买 nike

我去了这个website在线编译 C 并看到声明的 main 函数没有返回类型。

我知道有关此主题的一些问题 here ,但我没有发现任何关于省略返回类型的信息。我尝试使用 gcc 编译代码并且成功了。

这是否意味着如果我们不在 main 上放置返回类型,它会假定它是 int(或任何其他类型)?

最佳答案

C89 标准,为了保持与没有我们现在所知的函数原型(prototype)的原始 K&R C 版本的兼容性,允许函数隐式返回 int。编译器假定在没有显式返回类型(即 voidfloat 等)的情况下声明的任何函数返回 int

因此,当声明 main 函数时没有返回类型,它被假定为返回类型 int。一切都很好,因为根据标准,main 应该 返回 int

但是,这在 C99 中发生了变化。默认/隐式 int 规则已从语言规范中删除。没有显式返回类型的函数不再假定返回 int

这意味着对于任何现代编译器,遵循当前版本的 C 语言规范,没有返回类型的 main 声明是无效的。

至于为什么它适用于 GCC,这是因为默认情况下,GCC 仍然遵守 C89/C90 标准,除非您明确指定 -std=c99 作为编译器标志。为什么你仍然在网上看到这个,嗯,有两个原因。第一个是我已经给出的:它在语言规范的旧版本中是合法的,并且许多旧代码尚未更新。第二个原因是,不幸的是,网上和书本上有很多不好的 C 代码。您可能刚刚找到了一些。

关于c - 为什么我看到这么多 C 代码省略了 main 的返回类型?为什么它有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24320798/

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