ReleaseビルドとDebugビルドの違い

[戻る]
reshia [HomePage] 2005/02/05(土) 11:42:54
VisualStudio.NET2003、MFC有りで、
M_PIを使っていて、
#define _USE_MATH_DEFINES
#include <cmath> // math.hでも同じこと
もしているのですが、Debugビルドでは問題なく、Releaseビルドでは、
「error C2065: 'M_PI' : 定義されていない識別子です。」
とコンパイルエラーになります。

逆に、Releaseでは問題ないのに、Debugの時には、
「c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\fstream(465): 
error C2061: 構文エラー : 識別子 '_DebugHeapTag'」
というエラーが出たことがあります。
このエラーは
#include <fstream>
を
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
の前に持ってくる事で直ったのですが(謎)、
何故でしょうか??

まず、M_PIの方の件をお願いします。

reshia [HomePage] 2005/02/05(土) 15:35:34
一応、このエラーが出るソースをホームページの方にアップしましたので、
よければ見てください。

こちらです。
http://reshia.ifdef.jp/ware/anonview_src.lzh

BB 2005/02/05(土) 17:35:20
#define USE_MATH_DEFINES
#include <cmath>
#ifndef M_PI
#define M_PI       3.14159265358979323846    // なぜM_PIが定義されていないと言わ
れるのか?
#endif
スケルトンプロジェクトにこの部分だけコピペしたら、Debug/Release共に問題なく
ビルドできました。(VC++ 6 )
どこかの#ifdef-#endifの間に入ってしまっているとか、ここ以外の部分に問題がある
のではないでしょうか?

>#include <fstream>
>を
>#ifdef _DEBUG
>#define new DEBUG_NEW
>#endif
>の前に持ってくる事で直ったのですが(謎)、
>何故でしょうか??
STLのヘッダーはそうするのが定石のようです。
STL内のnew がDEBUG_NEWに置き換わると山のようにエラーを吐きます。

reshia [HomePage] 2005/02/05(土) 17:51:05
>STLのヘッダーはそうするのが定石のようです。
>STL内のnew がDEBUG_NEWに置き換わると山のようにエラーを吐きます。
なるほど。そういわれると納得します。

M_PIは、スケルトンに
#define _USE_MATH_DEFINES
#include <cmath>
だけ、貼り付けて、Serialize内で、
double pi = M_PI;
としてみましたが、
やはりエラーが出ます。

古いスレッドには追加発言できません。