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

C23标准中int main()与int main(void)是否为等效原型?

C23中int main()算不算合法的无参数main函数定义?

先理清楚两个关键标准条款

  • C23的6.7.6.3第13点明确:不带参数类型列表的函数声明器(也就是()),效果完全等同于用void当参数类型列表,而且会给函数生成原型。换句话说,普通函数里void func()和void func(void)在C23里是一回事。
  • 但对于main函数,5.1.2.2.1(程序启动)条款的要求是:无参数时要写成int main(void),或者用带两个参数的标准形式、等效形式、实现定义的形式。

关于int main()的合法性

虽然C23把普通函数的()和(void)划了等号,但结合两个细节来看:

  1. 标准对main的表述特意强调“应写为int main(void)”,没有直接把int main()列进去;
  2. C23草稿直接把C17里两处用int main()的示例改成了int main(void)。

这说明:

  • 从语法语义上,int main()在C23里确实和int main(void)等效(符合6.7.6.3的规则),属于合法的“等效定义”;
  • 但标准制定者明显更推荐用int main(void)——一方面是因为C23之前的标准里,int main()是旧式无原型声明,可能引发参数传递问题;另一方面统一写法能在所有C版本里保持兼容,避免不必要的混淆。

结论

  • 合法:C23中int main()是int main(void)的等效定义,符合标准要求;
  • 推荐写法:优先用int main(void),既能对齐标准的明确指引,也能保证跨C版本的兼容性和可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:52:35