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

为何C语言不允许隐式类型函数参数与显式类型参数混用?

为什么缺少参数类型的函数定义会报错?

在C语言的发展历程中,函数参数的类型规则有过明确变化:

  • **旧版C标准(C89)**曾支持「隐式int规则」:如果函数参数没有显式声明类型,编译器会默认它是int类型。但这个规则在C99标准里被彻底移除,后续的C11、C17等标准也不再认可这种写法。
  • 现代编译器默认行为:现在主流编译器(比如GCC、Clang)默认采用C99或更新的标准编译代码,当你写void foo(x, char y)时,编译器会判定这是语法错误——它期望在参数名x前看到明确的类型标识符,因此抛出expected identifier的报错。

而你提供的第二个代码void foo(int x, char y),显式声明了每个参数的类型,完全符合所有C标准的要求,所以能正常通过编译。

另外需要注意:哪怕通过编译器参数(比如GCC的-std=c89)强制使用旧标准编译,这种隐式类型的写法也属于过时特性,不推荐使用——它会降低代码可读性,还会导致代码在现代编译环境下兼容性变差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:01:53