对于代码:
int hi(int);
int hi();
int main()
{
hi(3);
}
我没有得到任何编译错误(调用hi()
;不带参数会得到编译错误).
我以为编译器会抱怨该函数已经声明了不同的方式.你知道为什么会有这种行为吗?
对于代码:
int hi(int);
int hi();
int main()
{
hi(3);
}
我没有得到任何编译错误(调用hi()
;不带参数会得到编译错误).
我以为编译器会抱怨该函数已经声明了不同的方式.你知道为什么会有这种行为吗?
您可以随意多次声明相同的符号,只要声明不相互冲突,就不会出现错误.
这是因为
int hi();
并不矛盾
int hi(int);
是因为一个没有任何参数的声明,意味着你说你真的不知道有多少个参数,或者它们是什么类型.这并不真的与第一个声明相矛盾.因为您已经声明了hi
,所以编译器将简单地使用该声明.
正如在 comments 中指出的,这将随着C23标准的变化而改变.它采用了C++中没有显式参数表示void
的语义,因此
int hi();
将相当于
int hi(void);
当然,这意味着这两个声明will相互矛盾.