例如
int main () {
void funct (...);
return 0;
}
void funct (...) {
}
在C中这是不好的做法吗?因为它编译得很好。谢谢。对不起我使用手机缩进
答案 0 :(得分:2)
我会这样做的:
// forward declaration of the function
void some_function();
int main ()
{
// call the function
some_function();
.....
return 0;
}
// define the function
void some_function()
{
.....
}
答案 1 :(得分:2)
我会说这很糟糕,是的。它只会让事情变得更加复杂,更难以遵循而没有真正的好处。将原型放在函数调用/定义之上的顶层,或者如果希望将其公开,则放在头文件中。
答案 2 :(得分:1)
在main()
(或任何其他函数)中使用函数原型的缺点是你必须在使用它的任何其他函数中重新声明它,这意味着你将丢失单点检查。
在使用函数之前, 应该在范围内有原型声明。
你应该只有一个函数的原型声明。 (并且,因为显然不明显为什么你应该只有一个函数的原型,或者任何类型的任何声明的一次出现,原因是在真实世界的代码'你如果有多个声明,你就不能承受多重维护问题。如果有重复并需要改变某些东西,那么你还有很多工作要做,如果有的话。不止一个宣言。这被称为 DRY 原则 - 不要重复自己;它也被称为 SPOT 原则 - 单点真相。可维护代码避免重复!)
如果该函数是静态的,您可以在使用之前定义该函数,也可以在该文件的顶部声明该函数。
如果函数是外部可见的,则意味着它要在定义的文件之外使用。应该有一个标头声明该函数,并且该标题应该在源文件中使用它的定义位置以及使用它的所有源文件。
您可以让GCC使用-Wmissing-prototypes
强制执行这些规则;我也使用-Wstrict-prototypes
和-Wold-style-definition
以及-Wold-style-definition
(并非所有版本的GCC都支持所有这些)。
所以,是的,在main()
内声明一个函数是不好的。