【问题标题】:Is it legal to put function prototypes inside of main or another function?将函数原型放在 main 或其他函数中是否合法?
【发布时间】:2011-12-01 01:44:08
【问题描述】:

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

【问题讨论】:

标签: c++ function-prototypes


【解决方案1】:

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

尽管如此,这是合法的:

#include <stdio.h>

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

  foo ();
  return 0;
}

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

【讨论】:

    【解决方案2】:

    是的,这是合法的 - 毫无疑问。不过,通常不建议这样做。

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

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

    • 如果函数定义在同一个源文件中(并且不在源文件之外使用),则将其范围限制在文件中(static 或匿名命名空间,或在适当的其他命名空间中),并确保它在使用之前定义或声明。
    • 如果函数在不同的源文件中定义,则应该有一个头文件来声明该函数。在定义函数的文件(以确保头中的声明与定义一致)和使用函数的文件中都包含头文件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      相关资源
      最近更新 更多