2012-03-12 10 views
7

私は、複数の.cファイルで使用されている.hファイルの定数としてメモリアドレスのセットを定義しようとしています(私たちはC++ではなく)。私はの名前をという変数で見ることができるようにしたいのですが、デバッガの16進アドレスを見るだけではなく、現在の#definesをスコープ内でグローバルな定数に変換したいのです。#defineを使用しないグローバル定数

const short int SOME_ADDRESS = 0x0010 

私はこれと同じの.hを使用して複数の.Cファイルを持っているので、私は恐ろしい「複数の宣言」のエラーが表示されます。問題は、私は、このようにそれらを定義した場合、です。私は列挙型を使用したいと思いますが、デフォルトでは整数型(システムでは16ビットです...)がデフォルトであるため動作しません。型を詳細に制御する必要があります。

私はすべてのアドレスを構造体に入れることを考えましたが、ヘッダファイルの構造体のインスタンスのデフォルト値を設定する方法はありません(私はしたくないある特定の.cファイルが最初に構造体を使用し、それを他の場所に埋め込むと仮定します。.hファイルに定義された定数を実際に持っていたいと思います)

私が始めたときはとてもシンプルでしたが、ヘッダーファイルでグローバルに利用可能な短いint定数を定義する良い方法を見てください...誰もこれを行う方法を知っていますか?

ありがとうございました!

答えて

23

externを使用して、ヘッダーファイル内の定数を宣言します。いずれかで、その後

extern const short int SOME_ADDRESS; 

、一つだけ、.cファイル定義を提供します。

const short int SOME_ADDRESS = 0x0010; 
+0

私がそうするなら、その特定の.cファイルが最初に呼び出されることを知る必要はありませんか?またはそれらが.cファイル内でグローバルに定義されている場合、関数が呼び出される前に定義が完了するでしょうか? –

+0

いいえ、定数を初期化するために呼び出す必要はありません。何も使用しようとする前に定義が存在します。定数が定義されている '.c'ファイルの' .o'(または '.obj')ファイルが最後のバイナリにリンクされていることを確認してください。 – hmjd

+0

それは動作します - ありがとう! –

0

あなたはgccでコンパイルしている場合は、 -ggdb3スイッチを追加すると、gccにマクロ情報(つまり#defines)を格納してgdb内で使用できるようになります。

関連する問題