从VS6移植到VS2012:返回值已拧紧

时间:2013-12-04 17:11:04

标签: visual-c++ visual-studio-2012 visual-studio-6

在将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中的某些想法所覆盖......

无论如何,感谢任何人的支持。

1 个答案:

答案 0 :(得分:1)

经过一些进一步的调查,我们发现数据结构调整存在问题。 在VS选项中,Struct Member Alignment设置为4个字节,而#pragma pack 2存在于其中一个源文件中。

奇怪的是,一切都在VS6下工作,移植到VS2012使这个问题出现了。