繁体   English   中英

功能原型在主要或主要在C之前

[英]function prototypes in main or before main in C

C中的函数原型应该在main还是main之前。 我在主教学之前就被教过,但是我的朋友课本主要用它来表示。 哪种方法正确?

他的书显示:

int main()
{
    void numberTable();

    numberTable();
}

void numberTable()
{
    int num;
    ...rest of the code...
}

两者都是正确的。
如果在main中添加函数声明,则其作用域位于main { }
如果将其添加到main之外,则其范围是整个源文件。

它可以是双向的 但是如果你在main之外声明,那么你可以访问代码中的任何地方,在其他情况下,它的范围在main之内。

在main之前定义函数的原因是为了避免在main之后定义函数时必需的函数声明。 C模块以这种方式编码是很常见的,即:依赖顺序定义的函数,以避免需要声明范围内的本地函数(我们应该小心如何在这里使用单词范围 - 范围不是由C链接器强制执行的)。

无论哪种方式都可以使用。 main()之外的声明(或更常见地,在任何函数之外)通常会导致较少的重复。

main()中声明函数时,该声明仅适用于main() 如果某个其他函数(例如function_1() )也调用相关函数(例如numberTable() )并在定义其他函数之前出现,那么你也必须在function_1()声明numberTable() (违反DRY:Don') t重复自己,还有SPOT:单点真相)。 另一方面,如果numberTable()的声明在任何函数之外并且在文件中的任何函数之前,那么所有函数都可以使用一个声明。

如果涉及多个源文件,则规则变得更简单。 所有可从其他文件调用的函数都应在头文件( header.h )中声明。 该标头应包含在引用标头中声明的任何函数的每个文件中,也应包含在定义标头中声明的每个函数的每个文件中。 标题应包含在使用它的文件中的任何函数之外。 (C标准要求标准头文件。)这可以确保所有代码都具有一致的每个函数声明视图。 最终,您将获得足够大的程序,甚至可能有多个标题。 适用相同的基本规则 - 在标题中声明函数; 包括使用和定义函数的头文件(在任何函数之外)。 (另请参阅C中的extern变量 。)

两者都是正确的; 然而,它在现实中并不是一种好的风格。
一个常见的良好实践:将所有这些函数声明和定义放在其他头文件和源文件中: header.h + header.c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM