在我的c ++代码(VS2013)中可能从VC6迁移,有一个警告C4177:#pragma'float_control'应该只在全局范围或命名空间范围内使用 代码如下:
bool ClassNameHere::FunctionNameHere(Process::FileInfo *fileInfo, RBF &File, PaveConfig &cfg)
{
//some code here
#pragma float_control( strict, on, push )
// Calculate sample interval.
double dResolution = 1000000 / odo.dOdoFactor; // (1.0 / odo.dOdoFactor) * 1000000.0;
double dPulsesPerElevInterval = (DWORD)cfg.fSampleInterval / dResolution;
// Small fix for test mode surveys
if (odo.dOdoFactor != 1)
dPulsesPerElevInterval = DWORD(1.0 + dPulsesPerElevInterval);
//some code here
//....
//...
dElevInterval = dElevInterval / 1000.0;
dAccelInterval = dAccelInterval / 1000.0;
#pragma float_control(pop)
return true;
}
有人知道如何处理警告吗?如果我只是将这些#pragma float_control移出函数,并将它们放入调用全局范围。我应该在哪里放?或者还有其他解决方案吗? 感谢,
答案 0 :(得分:2)
The documentation非常可怕,如果忽略警告会发生什么,
在当前作用域之后遇到全局作用域之前,pragma无效。
所以看起来你唯一的选择是将pragma移到函数之外。
如果你不关心some code here
被包含在内,那么请先推动功能,然后再弹出。
#pragma float_control( strict, on, push )
bool ClassNameHere::FunctionNameHere(Process::FileInfo *fileInfo, RBF &File, PaveConfig &cfg)
{
//some code here
// code we care about here
}
#pragma float_control(pop)
如果你关心some code here
被包含在内,请创建另一个包含push和pop之间当前代码的函数,用push和pop包围这个新函数,然后从FunctionNameHere
调用新函数。像
#pragma float_control( strict, on, push )
bool ClassNameHere::HelperForFunctionNameHere (Process::FileInfo *fileInfo, RBF &File, PaveConfig &cfg)
{
// code we care about here
}
#pragma float_control(pop)
bool ClassNameHere::FunctionNameHere(Process::FileInfo *fileInfo, RBF &File, PaveConfig &cfg)
{
//some code here
return HelperForFunctionNameHere(fileInfo, File);
}