アプローチ1を機能させるには、次の2つのファイルを定義する必要があります。
すべての定数を宣言するヘッダーファイル。
定数が定義および初期化されている.mファイル。
あなたの例では:
/* .h file */
extern const int numOfSamples;
/* .m or .c file */
const int numOfSamples = 7;
次に、これらの定数が必要な他のすべてのファイルに.hヘッダーを含めます。キーワードに注意してくださいextern
。これにより、定義せずに変数が宣言されます。このようにして、重複シンボルエラーを発生させることなく、.hファイルを複数回含めることができます。
編集:
私が提案するアプローチは、Cプログラムでグローバル変数を処理する正しい方法です。
さて、グローバル変数が良いかどうかは別として、それはもっと長い話です。
一般的に言って、グローバル変数はトリッキーであり、プログラム内のデータと動作のより良いカプセル化(別名、情報隠蔽)に向けた40年にわたる努力に反します(「システムをモジュールに分解する際に使用される基準について」、David Parnas、 1972)。
これをさらに説明するために、問題の1つの側面は、コメントで述べていることです。1つのモジュールがグローバル変数の値を変更し、プログラムの動作全体に影響を与える可能性です。これは明らかに悪いことであり、制御できない副作用につながります(自明でないサイズのプログラムでは)。
あなたの場合、「構成」と「定数」の値について話しているという点で、状況は少し異なると思います。これは一般的なケースとはまったく異なるケースであり、その目的のためにconstsのヘッダーファイルを安全に使用できると思います。
とは言うものの、一般的に、構成のテーマ全体が巨大なものであることを理解しています。たとえば、プログラム構成をその場で変更するメカニズムが必要になる場合があります。この場合、定数変数ヘッダーのアプローチは正しくありません。または、プログラム構成がリモートシステムの状態に依存する可能性があります(たとえば、ログインしているのか、ログインしていないのかを想像してください)。
ヘッダーファイルを使用することがあなたのケースに最適なアプローチであることを保証することはできませんが、上記の議論と私があなたに与えた例があなたがそれを理解するのに役立つことを願っています。