在main()之后放置函数定义比在main()之前放置它们有什么优势吗?

问题描述 投票:1回答:1

在main之后放置函数与在main之前放置它们对程序有什么影响吗?

示例 - 之后:

    void foo(void);

    int main(void){
        …
    }

    void foo(void){
        …
    }

示例 - 之前:

    void foo(void){
        …
    }

    int main(void){
        …
    }
c function
1个回答
5
投票

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

如果在包含main()的文件中定义的函数也在其他源文件中使用,那么您仍然会有一个标题声明这些函数,并且该标题将在包含main()的文件和其他源文件中使用。

如果可能的情况是,函数仅用于包含main()的文件中,那么您将确保将函数定义为static

如果将函数定义放在main()之后,则必须在函数使用之前声明它们(例如,通过main())。这是因为不使用古代或前期稀释的C - 所有函数必须在使用前声明。

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

void somefunc()
{
    …operations…
}

它提供了函数的声明,但它没有提供原型。这意味着你可以误拨它:

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

并且编译器不需要抱怨滥用。 (C ++中的规则在这方面是不同的 - 所有函数定义都提供了一个原型.C有一个C ++没有的遗留代码库,这使得它不能成为C的合理规则 - 因此,C标准委员会是明智的人, C标准不包括不合理的规则。)

要将其变成原型,您必须写:

void somefunc(void)
{
    …operations…
}

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

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

TL;DR

假设你用现代C写作:

  • 效果:无。
  • 优点:您可以从main()开始自上而下地学习代码。
  • 缺点:您必须声明函数以及定义它们。
© www.soinside.com 2019 - 2024. All rights reserved.