在将VS6项目移植到VC ++ 2012环境时,我遇到了一种奇怪的行为......
假设我有以下内容
// double AreaIco = 75.0;
// double theApp.m_GlobalScale = 0.25;
double ToLong(double); // elsewhere defined
double result = ToLong(AreaIco * theApp.m_GlobalScale * theApp.m_GlobalScale);
我发现ToLong函数的输入参数为“0”
如果我尝试引入临时变量,也会发生这种情况:
double temp1 = AreaIco * theApp.m_GlobalScale;
double temp2 = temp1 * theApp.m_GlobalScale;
AreaIcoInScala = ToLong(temp2);
temp1和temp2都计算为0或非规范化值。
但是,尝试评估QuickWatch中的表达式会返回正确的值。
有没有人对这种行为有任何线索?我担心代码中存在一些古老的错误,现在已经被VS6中的某些想法所覆盖......
无论如何,感谢任何人的支持。
答案 0 :(得分:1)
经过一些进一步的调查,我们发现数据结构调整存在问题。 在VS选项中,Struct Member Alignment设置为4个字节,而#pragma pack 2存在于其中一个源文件中。
奇怪的是,一切都在VS6下工作,移植到VS2012使这个问题出现了。