そのため、コードのクリーンアップを検討しており、extern を宣言するヘッダーを使用して、別の cpp ファイルでグローバル定数 (たとえば、char const* 文字列) を定義することに関する提案を見つけました。その後、必要な場所にヘッダーを含めて、1 つの場所から変数にアクセスできます。
例えば
文字列.hpp
extern char const* strA;
extern char const* strB;
文字列.cpp
#include "strings.hpp"
char const* strA = "strA";
char const* strB = "strB";
これは理にかなっていると思いましたが、しばらくして、これによりプロジェクトの大きなチャンクが不必要に再コンパイルされることに気付きました。たとえば、すべての文字列をまとめておくと、新しい文字列を追加するたびにヘッダーを変更する必要があります。これは、そのヘッダーを含むすべての cpp ファイルが再コンパイルされることを意味します。プロジェクトが複雑になるにつれて、これは合計される可能性がありますが、時間がかかるかどうかはわかりません.
この問題の解決策はアイデアを維持することだと私には思えますが、ヘッダーを含める代わりに、1 つの cpp ファイルで定数を宣言および定義します。
文字列.cpp
extern char const* strA;
extern char const* strB;
char const* strA = "strA";
char const* strB = "strB";
次に、文字列が必要なファイルで、必要な変数を宣言します
A.cpp
extern char const* strA;
B.cpp
extern char const* strB;
基本的に、インクルードが私のために行っていたであろうことを手動で行います。
ただし、後で C.cpp で使用される char const* strC を追加する必要がある場合は、strings.cpp で extern 宣言と定義を追加し、C.cpp で再度宣言し、A.cpp と B.cpp で宣言します。再コンパイルする必要はありません。
このアプローチの欠点は、コードの重複です。変数を一度宣言して宣言を含める代わりに、使用したい場所ですべての変数を宣言する必要があります。その問題は、変数の名前を変更することにした場合、いくつかの場所で名前を変更する必要があることです。しかし、変数の名前を変更すると、宣言が含まれていたとしても、それを使用するすべてのファイルを変更する必要があります。とにかく、グローバルな名前変更を行うことができます。
複数のソース ファイルに影響を与えない変更を行った場合に、複数のソース ファイルを再コンパイルする時間のコストは、変更するかどうかに関係なく変数の名前を変更するコストよりもはるかに大きくなる可能性があるようです。それでも、言及された宣言ヘッダーが含まれていることのこの欠点を見たことがありません。
不足しているものはありますか?