为什么gcc可以编译以下代码
#include <stdio.h>
int func();
int func(int a) { return 1; }
int main() {
func(10);
return 0;
}
但是如果我加char func();
,gcc说conflicting types for ‘func’
这不是重载,因为您不能不func()
带参数地调用。这是具有兼容功能声明符的单个功能的特殊情况,如标准中所述:
如果一种类型具有参数类型列表,而另一种类型由不属于函数定义一部分且包含空标识符列表的函数声明符指定,则该参数列表不应具有省略号终止符,并且每个参数的类型均应为与应用默认参数提升的结果类型兼容。
从更改返回类型int
来char
就是要打破这个规则的一种方式。打破它的另一种方法是提供除以下以外的参数类型int
:
int func();
int func(char a) { return 1; } // Does not compile
如果要声明不带任何参数的函数,则声明符应如下所示:
int func(void);
现在声明func
带的int
会导致编译时错误:
int func(void);
int func(int a) { return 1; } // Does not compile
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句