1

次のファイルがあるとします。

  1. main.cpp
  2. ルーチン.cpp
  3. ルーチン.h

さらに、main.cppがroutine.cppで定義されている関数を呼び出すが、routine.cppには、関数によってのみ使用されるroutine()関数も含まれているとします。つまり、routine.cppには、routine.cpp内からのみ呼び出される関数と、他のソースファイルから呼び出される関数の両方が含まれています。routine()

明らかに、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

routing.hには、routine.cpp(スタイルB)の外部で使用することを意図していない関数の宣言を含めることはできません。

于 2012-04-22T17:54:40.023 に答える