C2x移除K&R函数定义后无参函数是否可直接使用空括号声明?
C2x移除K&R函数定义后无参函数声明规则说明
结论先行
可以在符合C2x标准的环境中直接用空括号声明无参函数,语义和其他编程语言的空括号无参声明完全一致。
具体规则解释
- 旧标准遗留逻辑:C2x之前的C标准为了兼容K&R风格函数定义,
void foo();的语义是「未指定函数的参数数量与类型」,只有声明为void foo(void);才明确表示函数不接受任何参数。 - C2x的调整:随着K&R风格函数定义被正式移除,标准已经明确将空括号的函数声明/定义语义修改为「该函数不接受任何参数」,两种写法
void foo();和void foo(void);在C2x环境下语义完全等价。
使用建议
- 如果你的项目仅面向C2x及更高版本的编译环境,可以直接使用空括号的写法,代码更简洁,也符合大多数编程语言的通用书写习惯。
- 如果你的项目需要兼容C2x之前的旧标准编译器,建议继续保留
void foo(void);的写法,避免不同标准下语义差异引发的编译错误、参数调用校验失效等问题。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

