gpt4 book ai didi

c - 将函数定义放在 main() 之后是否比将它们放在 main() 之前有任何优势?

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:58 25 4
gpt4 key购买 nike

与将函数放在 main 之前相比,将函数放在 main 之后对程序有什么影响吗?

例子——之后:

    void foo(void);

int main(void){

}

void foo(void){

}

例子——之前:

    void foo(void){

}

int main(void){

}

最佳答案

假设您使用旧 C (C99) 或新 C (C11) 而不是古代 C (C90) 或 ante-diluvian C(准标准 C),那么在 main() 之前定义函数的优势 是你不需要单独指定那些函数的原型(prototype)——定义也指定了原型(prototype)。

如果在包含 main() 的文件中定义的函数也在其他源文件中使用,那么无论如何您都会有一个声明函数的头文件,并且该头文件将在两个包含 main() 和其他源文件的文件。

如果(可能是这种情况)函数仅在包含 main() 的文件中使用,那么您需要确保将函数定义为 static .

如果将函数定义放在 main() 之后,则必须在使用函数之前声明它们(例如通过 main())。这是不使用古老或泛滥的 C 语言的结果——所有函数都必须在使用前声明。

请注意,定义这样的函数不会声明该函数的原型(prototype):

void somefunc()
{
…operations…
}

它提供函数的声明,但不提供原型(prototype)。这意味着您可能会误称它:

somefunc(1);
somefunc("a", "z");

并且编译器不需要提示误用。 (C++ 中的规则在这方面有所不同——所有函数定义都提供了一个原型(prototype)。C 有一个 C++ 没有的遗留代码库,这阻止了它成为 C 的明智规则——所以,C 标准委员会是明智的人, C 标准不包括非敏感规则。)

要使其成为原型(prototype),您必须编写:

void somefunc(void)
{
…operations…
}

因此,如果在 main() 之前正确定义函数,则无需重复它们的声明。如果在 main() 之后定义函数,那些直接从 main() 调用的函数必须在 之前的范围内有一个声明(并且应该有一个原型(prototype)声明) main() 已定义。

请注意,您不应该在其他函数中声明函数,无论这有多允许。这种“隐藏”声明是一项主要的维护责任。声明应该在文件范围内,通常在文件顶部或标题中。

长话短说

假设您使用现代 C 编写:

  • 效果:无。
  • 优点:您可以从 main() 开始自上而下地研究代码。
  • 缺点:您必须声明函数并定义它们。

关于c - 将函数定义放在 main() 之后是否比将它们放在 main() 之前有任何优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47986756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com