• ベストアンサー

Visual Studio .net ヘッダーファイルに付加されている宣言について

お世話になっております. 現在Visual studio .net 2003で書かれたシステムのソースを読んでいるのですが,ヘッダファイルの冒頭に #if !defined(AFX_ ... というものがあります. 私がファイルを新規作成しても追加されないのですが,これは何かウィザードを用いてヘッダファイルを生成したときに付加されるものなのでしょうか? ...の部分には16進数が記載されています. よろしくお願いいたします.

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

  • ベストアンサー
  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.2

おそらくですが・・・ #pragma onceがサポートされたのはどうもVC5.0からのようで、それ以前のバージョンのソースとの互換のために、質問のマクロをつける動作をしていたんだと思います。 で、.Netになってから大幅に動作変更があったので、ついでにウィザードの動作も変更したのかと・・・

その他の回答 (1)

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.1

手元にVS6.0とVS2005しかないので、それらとの比較になりますが・・・ そのdefine文は以下のような感じで記述されていませんか? #if !defined(AFX_・・・・・・_INCLUDED_) #define AFX_・・・・・・_INCLUDED_ 中略 #endif // !defined(AFX_・・・・・・_INCLUDED_) これらは、各ソースファイルをコンパイルする際に、同じヘッダファイルが複数回インクルードされてしまっても、宣言が1度だけ行われるようにするための手法です。 VS6.0あたりではこの定義がウィザードを利用してクラスを追加すると、自動的に記述されます。 VS2005ではこの手法の代わりに、「#pragma once」というプラグマがあり、これをヘッダファイルの先頭に記述しておくと同じような動作をしてくれるようになっています。 VS2003を利用したことがないので、どちらになっているかわかりませんが、ヘッダファイルに「#pragma once」の記述があれば質問のif~defineの手法は必要ないです。 違ってたらゴメンナサイ。

yuukitnk
質問者

お礼

回答ありがとうございます. その通りです.私がウィザードを利用しても自動生成されないので困っておりました.重複インクルードを防ぐために新規に作成したファイルについては#pragma onceを用いています. しかし#pragma onceでこと足りてしまうのであれば,なぜ上記のようなdefine文があるのか理解できません.

関連するQ&A