dポイントプレゼントキャンペーン実施中!

お世話になっております.
現在Visual studio .net 2003で書かれたシステムのソースを読んでいるのですが,ヘッダファイルの冒頭に

#if !defined(AFX_ ...

というものがあります.
私がファイルを新規作成しても追加されないのですが,これは何かウィザードを用いてヘッダファイルを生成したときに付加されるものなのでしょうか?

...の部分には16進数が記載されています.
よろしくお願いいたします.

A 回答 (2件)

おそらくですが・・・



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

手元に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の手法は必要ないです。

違ってたらゴメンナサイ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます.
その通りです.私がウィザードを利用しても自動生成されないので困っておりました.重複インクルードを防ぐために新規に作成したファイルについては#pragma onceを用いています.

しかし#pragma onceでこと足りてしまうのであれば,なぜ上記のようなdefine文があるのか理解できません.

お礼日時:2010/04/13 20:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!