• ベストアンサー

C言語 #defineについて

C言語でどの様に考えれば良いか分からない事があるので、教えて下さい。 以下の様な行が出てきたのですが、どういう意味なのでしょうか? #define SYSTEM (*(volatile struct st_system *)0x80000) 現状分かっている事は 1.#define ABC 100   ならこれ以降で出てくるABCは100と読み替える。 2.volatileはコンパイラの最適化を抑制する様な意味。 とい事です。 以上、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

#defineはマクロの定義です。 マクロは「プログラム中の文字列を単純に置き換える」だけのものです。 その意味については、「この時点では」関係ありません。 この例は >1.#define ABC 100 >  ならこれ以降で出てくるABCは100と読み替える。 とまったく同じです。 > 2.volatileはコンパイラの最適化を抑制する様な意味。 は、とりあえずマクロの処理の時点では考えなくてよいです。 プログラム中に SYSTEM とあったら (*(volatile struct st_system *)0x80000) と「置き換えるだけ」ものです。 置き換えたものがプログラムでどんな意味を持つかは、また別の問題です。 0x80000 を st_system構造体のポインタにキャストして、*でその実体を求めるものです。 名前からして、0x80000にあたる領域にはシステムに関する情報が記録されていて、st_system構造体の各メンバが、それぞれの状態を表わすようになっているのでしょう。例えば if ( SYSTEM.busy ) /* システムがビジー状態なら */ SYSTEM.reset = 1; /*システムにリセット信号を送る */ という感じで。システムの状態は刻々と変わるものですから、最適化で「定数」あつかいされないように、volatileを付けているのでしょう。

abcdef220
質問者

お礼

ありがとう御座いました。 難しいですね。 頑張って理解します。

関連するQ&A