0

以下で構成されるマルチファイルプログラムがあります

main.cpp
ext1.cpp
ext2.cpp
ext3.cpp
vars.h

名前が示すように、main.cpp はメイン ファイルで、extX.cpp にはさまざまな関数が含まれ、vars.h にはいくつかのグローバル定数が含まれています。

ただし、main.cpp には (いくつかの!) 変数宣言もありますが、それらは main.cpp のスコープ内にある必要があります。そのため、それらを vars.h に配置していません。

main.cpp のコード量を減らしたい (わかりやすくするため)。これらの変数をある種のヘッダー内で宣言する方法を探していますが、main.cpp にしか見えないようにしています。

たとえば、vars_main.h (外部キーワードなし) 内にそれらをすべて配置し、「vars_main.h」だけを含めると、目標を達成したことを正しく理解していますか?

このようにするのは「正しい」C++スタイルと見なされますか?

4

3 に答える 3

1

それらは別個のブロックにあり、コードの可読性には影響しないため、通常は main.cpp で定義します。ただし、それらを 1 つの .cpp にのみ含まれる別のインクルード ファイルに移動することもできます。これは完全にあなた次第です。

于 2013-02-05T18:30:16.273 に答える
1

あなたが話している変数がメインにプライベートなグローバル変数である場合、それらをmain.cppに入れるべきだと思います。それらが他の場所で使用されていない場合、それらをヘッダーで宣言しても意味がありません

変数が実装の他の部分で使用されないように、変数をプライベート スコープで使用して「メイン」機能を実装するクラスを作成することもできます。

于 2013-02-05T18:30:25.070 に答える
1

これらの変数が でのみ使用されている場合main()、はい、それを行うことができます。しかし、私はそれを「正しい C++ スタイル」と見なすことはしません。

ある日、そのヘッダー ファイルを別の翻訳単位に含めることになった場合 (おそらく、それらの変数の1 つだけを共有する必要があるため)、リンカーは複数の定義について不平を言い始めます。

その時点で、これを克服するために、キーワード使用staticしてこれらの変数に内部リンケージを与え、複数の定義の問題を回避することができます。ただし、この方法では、各翻訳単位(.cppファイル)はこれらの変数の独自のコピーを保持します。これは、特に定数ではない場合、おそらく必要なものではありません-記録のために、グローバル定数にはデフォルトで内部リンケージがあるため、として明示的に修飾する必要はありませんstatic

ここでの通常の方法は、これらの変数の定義を に残すか、それらの変数の宣言main()のみを含む 1 つのヘッダーと、それらの定義を含む 1 つの翻訳単位を持つことです。次に、それらの変数にアクセスする必要があるすべてのファイルは、宣言を含むヘッダーをインポートするだけです。extern

于 2013-02-05T18:30:35.163 に答える