我正在寻找 VS Pro 2022 编译的旧 C++ Win32 程序中的计算错误。 发现问题是由以下代码引起的,该代码总是产生零结果:
double dMetalFrameR = 0.0;
if (m_dMetalDoorK)
double dMetalFrameR = m_dMetalDoorX / m_dMetalDoorK;
删除重新声明后,它就可以正常工作了:
double dMetalFrameR = 0.0;
if (m_dMetalDoorK)
dMetalFrameR = m_dMetalDoorX / m_dMetalDoorK;
重新声明显然是错误的,但为什么结果总是为零?
我本来期望编译器发出警告,但计算是正确的。
假设该函数末尾有一个
return dMetalFrameR;
,那么结果始终是 0.0
,因为该变量从未改变其初始值。
这个,不正确,代码:
double dMetalFrameR = 0.0;
if (m_dMetalDoorK)
double dMetalFrameR = m_dMetalDoorX / m_dMetalDoorK;
创建一个同名的新变量,然后在
if
语句超出范围时丢弃它。