在main之后放置函数与在main之前放置它们对程序有什么影响吗?
示例 - 之后:
void foo(void);
int main(void){
…
}
void foo(void){
…
}
示例 - 之前:
void foo(void){
…
}
int main(void){
…
}
答案 0 :(得分:5)
假设你使用的是旧的C(C99)或新的C(C11),而不是古代的C(C90)或者前者 - 稀释的C(标准前的C),那么在main()
之前定义函数的好处是你不需要单独指定那些函数的原型 - 定义也指定了原型。
如果在包含main()
的文件中定义的函数也在其他源文件中使用,那么您仍然会有一个标题声明这些函数,并且该标题将在包含{{1}的文件中使用和其他源文件。
如果可能的话,这些函数仅在包含main()
的文件中使用,那么您可以确保将函数定义为main()
。
如果将函数定义放在static
之后,则必须在使用之前声明函数(例如main()
)。这是因为不使用古代或前期的稀释C - 所有函数必须在使用前声明。
请注意,定义这样的函数 not 声明函数的原型:
main()
它提供了函数的声明,但它没有提供原型。这意味着你可以误拨它:
void somefunc()
{
…operations…
}
并且编译器不需要抱怨滥用。 (C ++中的规则在这方面是不同的 - 所有函数定义都提供了一个原型.C有一个C ++没有的遗留代码库,这使得它不能成为C的合理规则 - 因此,C标准委员会是明智的人, C标准不包括不合理的规则。)
要将其变成原型,你必须写:
somefunc(1);
somefunc("a", "z");
因此,如果在void somefunc(void)
{
…operations…
}
之前正确定义了函数,则无需重复声明。如果在main()
之后定义函数,那么直接从main()
调用的函数必须在定义main()
之前在范围内具有声明(并且应该具有原型声明)。
请注意,您不应在其他函数中声明函数,无论它是多么允许。这种“隐藏”声明是一项主要的维护责任。声明应位于文件范围,通常位于文件顶部或标题中。
假设你用现代C写作:
main()
开始自上而下地学习代码。