1

假设我有以下文件:

  1. 主文件
  2. 例程.cpp
  3. 例程.h

进一步假设 main.cpp 调用了一个routine()在routine.cpp 中定义的函数,但routine.cpp 还包含由该函数使用的routine()函数。换句话说,routine.cpp 包含仅从routine.cpp 中调用的函数和从其他源文件调用的函数。

显然 main.cpp 将包含#include "routine.h". 但是routine.h 是否应该包含在routine.cpp 中定义的所有函数的原型(样式A),或者routine.h 是否应该包含从其他源文件调用的函数的原型(样式B)?

我总是在样式 A 之后编写代码,但最近我想知道样式 B 在样式上是否更有意义。(如果使用样式 B,则仅在routine.cpp 中使用的函数的原型可能位于routine.cpp 的顶部,或者定义可以简单地在其使用之前。)

4

3 回答 3

7

通常,标头只包含公共接口的方法(如果这些是自由函数)。routine.cpp您可以声明在匿名命名空间中使用的辅助方法。

//routine.h

void foo();
void goo();

//routine.cpp

namespace
{
   void fooHelper() {}
   void gooHelper() {}
}

void foo()
{
   fooHelper();
}
void goo()
{
   gooHelper();
}

这样的函数以前是声明static的,这给了它们内部链接,但现在的一般风格是使用匿名命名空间。

于 2012-04-22T17:48:28.563 回答
0

Google 的风格指南非常全面。它为他们的选择提供了利弊和理由。 http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

于 2012-04-22T17:49:16.527 回答
0

routine.h 不应包含那些不打算在routine.cpp(样式B)之外使用的函数的声明。

于 2012-04-22T17:54:40.023 回答