Intel的C++ Compiler为什么要这样?
弟十六 2004-10-13 08:13:46 假设有两个浮点数如下:
float fVar1( 2.5), fVar2( 2.7);
那么对于的逻辑表达式
if( fVar1 == fVar2)
这一句在编译时会出警告。
如果改成下面这样则不会发出警告:
if( ( long)fVar1 == ( long)fVar2)
表面上看着舒服了,但这是建立在程序不能正常运行的基础上的!
float fVar1( 2.5), fVar2( 2.7);
if( fVar1 == fVar2)
std::cout << "fVar1 equal fVar2. " << std::endl;
else
std::cout << "fVar1 isn't equal fVar2. " << std::endl;
if( ( long)fVar1 == ( long)fVar2)
std::cout << "fVar1 equal fVar2. " << std::endl;
else
std::cout << "fVar1 isn't equal fVar2. " << std::endl;
运行结果:
fVar1 isn't equal fVar2.
fVar1 equal fVar2.
微软的编译器就不存在这个问题,Intel的C++ Compiler为什么会这样?我不明白!
看着一行行冒出的警告实在是不爽,那么除了#progma warning( disabel : xxxx)还有什么别的办法呢?