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

时间:2011-12-01 01:44:08

标签: c++ function-prototypes

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

2 个答案:

答案 0 :(得分:5)

显然最好把原型放在自己的标题中;在任何功能之外:)

然而,这是合法的:

#include <stdio.h>

int
main (int argc, char *argv[])
{
  void foo ();

  foo ();
  return 0;
}

void foo ()
{
  printf ("Foo!\n");
}

答案 1 :(得分:2)

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

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

此外,您将失去交叉检查的主要好处。最好的方法是:

  • 如果函数在同一源文件中定义(并且未在源文件外部使用),则将其范围限制为文件(static或匿名命名空间,或者在相应的其他命名空间中),以及确保在使用之前定义或声明它。
  • 如果函数是在不同的源文件中定义的,那么应该有一个声明该函数的头。在定义函数的文件中包含标题(以确保标题中的声明与定义一致)和使用该函数的文件中包含标题。

这样,如果您需要更改函数声明,则可以减少要跟踪的位置。如果在多个位置声明了函数,则必须一次更改所有声明。当然,对于一个足够彻底的改变(额外的参数或更少的参数),你将不得不修改对函数的调用;对于其他更改(例如向参数添加const限定符,或者从传递值更改为按引用传递),您可能不需要更改源中的任何内容;一个简单的重新编译就足够了。