【发布时间】:2021-08-16 02:05:03
【问题描述】:
int test();
int test(){
return 5;
}
int test(int in);
int main() {
return test();
}
我知道一个函数可以有多个(和类似的)声明,并且只有一个定义。
我的问题与自己定义后的声明有关。编译器是否选择它遇到的最后一个原型作为真正的原型?即使它来自父亲的完整定义?
这不编译错误说:
error: too few arguments to function 'test'
【问题讨论】:
-
int test()不是原型。这是一个 K&R 风格的声明。 -
int test();正在声明一个带有未定义参数的函数。因此它将与任何其他int test(...)声明“兼容”。但是尝试给它不同的参数列表,它就不行了。 -
int test();不是原型。这是一个无原型的声明——一个为向后兼容而存在的结构,与int test(void)prototype 不同。如果你从不使用int test();,你的生活会更简单。除非您尝试与 pre-ansi C 向后兼容,否则永远不需要它。 -
这是2个
int test(){ ... }和int test(int in);相互冲突,而不是int test(); -
这个问题所证明的混乱是一个强烈的理由不断提醒人们不要写
int main()。
标签: c function-declaration function-prototypes