C语言中main或main之前的函数原型

C语言中main或main之前的函数原型,c,C,C中的函数原型应该在main中还是在main之前。我是在主课之前被教的,但我的朋友们的课本在主课上展示了这一点。哪种方法正确 他的书表明: int main() { void numberTable(); numberTable(); } void numberTable() { int num; ...rest of the code... } 两者都是正确的。 如果在main中添加函数声明,则其作用域位于main{} 如果将其添加到main之外,则其作用

C中的函数原型应该在main中还是在main之前。我是在主课之前被教的,但我的朋友们的课本在主课上展示了这一点。哪种方法正确

他的书表明:

int main()
{
    void numberTable();

    numberTable();
}

void numberTable()
{
    int num;
    ...rest of the code...
}
两者都是正确的。
如果在main中添加函数声明,则其作用域位于main
{
}


如果将其添加到main之外,则其作用域是整个源文件。

它可以是双向的。但是如果您在main之外声明,那么您可以访问代码中的任何地方,在另一种情况下,它的作用域在main之内。

在main之前定义函数的原因是避免在main之后定义函数时所需的函数声明。C模块以这种方式编码是很常见的,即:函数以依赖顺序定义,以避免需要声明作用域中的本地函数(我们应该注意在这里如何使用scope这个词-作用域不是由C链接器强制执行的)。

任何一种方式都可以工作。在
main()
(或者更一般地说,在任何函数之外)之外的声明通常会减少重复

main()
中声明函数时,该声明仅适用于
main()
。如果其他函数(例如
function\u 1()
)也调用相关函数(例如
numberTable()
)并在定义其他函数之前出现,那么您也必须在
function\u 1()
中声明
numberTable()
(请注意:不要重复您自己,也要注意:单一真理点)。另一方面,如果
numberTable()
的声明在任何函数之外且在文件中的任何函数之前,则所有函数都可以使用一个声明


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

两者都是正确的;然而,实际上这不是一种好的风格

一个常见的好做法是:将所有这些函数声明和定义放在其他头文件和源文件中:
header.h
+
header.c

是否最好放在main之前?我只是想知道,因为我的老师要求在main之前声明所有函数,我想知道这是否必要。我想说,将原型放在文件范围内,放在任何函数体之外是更好的方式。你可以在一个函数中,甚至在一个块中有一个原型,但这会限制原型对该块的可见性,这是一件奇怪的事情。对于具有多个源文件的大型程序,大多数函数原型都将位于头文件中。没错!没有错,只是有点奇怪。这个答案+Keiths comment=很好的答案。K&R有一个例子,在其他函数中声明函数。这并不是说这是一个很好的风格参考,但如果是在K&R,它至少是合法的C。