• ベストアンサー

Visual C++ ヘッダー情報の反映

ヘッダー内の定義(の変更)が反映されないことがあります。 例えば、 "stdafx.h"において #define a 123 と定義して、関数項目main.cppとfunc.cpp両方でaを使うとします。 もちろんどちらも最初に#include "stdafx.h"とインクルードしています。 ですがdefine定義を#define a 456のように変更し実行すると、 main.cpp内ではa=456で動作し、func.cpp内ではa=123で動作する。 というような症状がしばしば現れます。 Visual stadio 2008でプログラミングしています。 c++ 6.0のときも同様の症状が現れていたのですが、何か問題があるのでしょうか? よろしくお願いします。

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

  • ベストアンサー
回答No.1

"stdafx.h" このヘッダを使わないというのはどうでしょう。 (使わなくても組めますよね?) main.cpp なら main.h を func.cpp なら func.h を それぞれ作りましょう。 多分 main.cpp の関数が func.cpp の関数を呼び出すものだと思います。 その場合 func.h に定義して、 main.cpp で func.h をインクルードしましょう。 stdafx.h はプリコンパイル済みのヘッダー?とかだった気がします。 知識が無いので使っていませんが、無くて困ったことは無いです。 (むしろあったら邪魔でした) stdafx.h については私も知りたいですね。

snake_sato
質問者

お礼

回答ありがとうございました。 >>"stdafx.h" このヘッダを使わないというのはどうでしょう。 そうすることにします。

その他の回答 (1)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.2

プリコンパイル済みヘッダは まず変更されることが無い箇所(システムライブラリのインクルード部分など)をあらかじめコンパイルしておくことで、 ビルド時間を短縮するためのものです。 なので変更される可能性の高い記述は 基本的にプリコンパイル済みヘッダに書くべきではないです。 (もし変更した場合は、リビルドしないとだめなんじゃないかな。) よく分からないなら使わないというのもありでしょう。 ビルド時間が長くて困ってないなら別に必要ないでしょうから。

参考URL:
http://sgry.jp/pgarticles/precompiled_header.html
snake_sato
質問者

お礼

回答ありがとうございました。 >>なので変更される可能性の高い記述は >>基本的にプリコンパイル済みヘッダに書くべきではないです。 たしかにそのようです。 それぞれのヘッダファイルを作ることにしました。

関連するQ&A