将函数原型放在main或其他函数中是否合法?

Is it legal to put function prototypes inside of main or another function?

本文关键字:函数 是否 其他 原型 main      更新时间:2023-10-16

在c++语言中,将函数原型放在main或其他函数中是否合法?这种做法不好吗?为什么有人把原型放在main里面?

显然最好将原型放在它们自己的页眉中;在任何函数之外:)

尽管如此,这是合法的:

#include <stdio.h>
int
main (int argc, char *argv[])
{
  void foo ();
  foo ();
  return 0;
}
void foo ()
{
  printf ("Foo!n");
}

是的,这是合法的——这是毫无疑问的。但这通常是不可取的。

不可取的一个原因是该函数只在该特定函数中可用(作为该声明的结果);同一文件中的其他函数不能使用该声明(但其他函数可能包含它们自己的函数声明-但这样您就重复了自己,这不是一个好主意)。

另外,你失去了交叉检查的主要好处。最好的方法是:

  • 如果函数是在同一个源文件中定义的(并且没有在源文件之外使用),那么将其作用域限制为文件(static或匿名名称空间,或在适当的其他名称空间中),并确保在使用它之前定义或声明它。
  • 如果函数是在不同的源文件中定义的,应该有一个声明函数的头文件。在定义函数的文件(确保头文件中的声明与定义一致)和使用该函数的文件中都包含头文件。
这样,如果您需要更改函数声明,您需要跟踪的地方就会更少。如果在多个地方声明函数,则必须立即更改所有声明。当然,对于一个足够彻底的改变(额外的参数,或更少的参数),你将不得不修改对函数的调用;对于其他更改(如在参数中添加const限定符,或从按值传递更改为按引用传递),您可能不需要更改源代码中的任何内容;简单的重新编译可能就足够了。