Clang编译无原型函数时因参数类型引发冲突的问题咨询
Clang函数声明与定义的编译冲突问题
在Clang(包括AppleClang 1400.0.29.202和Homebrew安装的clang 15.0.7)中遇到了奇怪的编译现象。现有代码如下:
int bar(); int bar(int a, TEST b) { return 43; }
使用-DTEST=int编译可通过,但使用-DTEST=char编译时会报错conflicting types for 'bar',且该现象不受指定标准影响(已测试c89和c99)。
我是否忽略了某些细节?
编辑1:
清楚省略函数原型的做法不被推荐,本人也不会编写此类代码,但现有大量遗留代码采用该写法。今早编译enscript时遇到了此问题。
此外,以下代码使用-DTEST=char可正常编译:
int bar(); int bar(a, b) int a; TEST b; { return 43; }
编辑2:
本该先尝试其他编译器再提问。GCC的输出中包含关于参数提升的提示,翻译如下:
注意:带有默认提升的参数类型无法匹配空参数列表声明
内容的提问来源于stack exchange,提问作者nightuser
相关产品推荐
相关产品推荐

