You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于1988年文档中无返回值main()函数语法的技术咨询

关于K&R风格main函数的合法性与语法变迁

这个写法完全合法——它是K&R C(也就是C语言最初的“经典”语法,出自1978年的《The C Programming Language》第一版)的标准函数定义方式,在1988年那个时候是非常常见的写法。下面拆解一下细节:

为什么这个写法在当时是合法的?

  • 省略返回类型:在K&R C的规则里,如果函数没有显式声明返回类型,编译器会默认它返回int类型。所以这个main函数其实和后来标准里的int main()是等价的,只是写法上省略了返回类型声明。
  • 参数的分离式声明:K&R C的函数参数定义采用“先列参数名,再单独声明类型”的风格。这里main(argc, argv)先列出了两个参数名,后面的char *argv[];是专门声明argv的类型;而argc因为没有单独声明类型,会被默认当作int类型(当时的规则:未显式声明类型的变量/参数默认是int)。

为什么现在的C语法不一样了?

这是因为C语言的标准一直在演进,1989年ANSI发布了第一个标准化的C标准(也就是我们常说的C89),之后的C99、C11、C17等后续标准都逐步淘汰了K&R风格的函数定义,转而要求使用原型风格的函数定义,原因主要有两点:

  1. 可读性与安全性:K&R风格的写法容易产生歧义,比如默认int的规则可能导致意外的类型转换错误,显式声明所有类型能让代码更清晰,也方便编译器做严格的类型检查,减少bug。
  2. 标准化统一:原型风格的函数定义是C也支持的写法,这样能让C和C的语法更接近,也便于跨语言的代码交互。

现在的主流编译器(比如GCC、Clang)虽然可能还兼容这种旧写法,但通常会抛出警告,提示你改用现代的标准写法。

等价的现代C写法

把你找到的老代码转换成现在的标准写法,应该是这样的:

int main(int argc, char *argv[])
{
    // some statements...
}

或者也可以写成int main(int argc, char **argv)——在函数参数里,char *argv[]和char **argv是完全等价的,因为数组参数会被编译器隐式转换成指针。

内容的提问来源于stack exchange,提问作者rudicangiotti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:28:21