プロが教えるわが家の防犯対策術!

ヘッダー内の定義(の変更)が反映されないことがあります。

例えば、
"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のときも同様の症状が現れていたのですが、何か問題があるのでしょうか?

よろしくお願いします。

A 回答 (2件)

"stdafx.h" このヘッダを使わないというのはどうでしょう。


(使わなくても組めますよね?)
main.cpp なら main.h を
func.cpp なら func.h を
それぞれ作りましょう。

多分 main.cpp の関数が func.cpp の関数を呼び出すものだと思います。
その場合 func.h に定義して、
main.cpp で func.h をインクルードしましょう。


stdafx.h はプリコンパイル済みのヘッダー?とかだった気がします。
知識が無いので使っていませんが、無くて困ったことは無いです。
(むしろあったら邪魔でした)
stdafx.h については私も知りたいですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/25 20:48

プリコンパイル済みヘッダは


まず変更されることが無い箇所(システムライブラリのインクルード部分など)をあらかじめコンパイルしておくことで、
ビルド時間を短縮するためのものです。

なので変更される可能性の高い記述は
基本的にプリコンパイル済みヘッダに書くべきではないです。
(もし変更した場合は、リビルドしないとだめなんじゃないかな。)

よく分からないなら使わないというのもありでしょう。
ビルド時間が長くて困ってないなら別に必要ないでしょうから。

参考URL:http://sgry.jp/pgarticles/precompiled_header.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/25 20:49

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