VC拒绝十六进制浮点常数

Kev*_*vin 5 c floating-point floating-accuracy visual-studio-2008 visual-studio

我正在编写一个程序,它将CIL字节码转换为C源代码以供机器使用.我担心由于转换为十进制和从十进制转换而导致的浮点常量不准确.在做了一些研究后,我发现C(但不是C++)应该能够接受浮点常量的十六进制表示法.

我决定尝试一下,但无论我尝试什么,MS VC9都会给我错误.这是我正在尝试的:

// Switches: /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /FD /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TC

#include <tchar.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    double d = 0x1.0p+1;    // error C2059
    //double d = 0x1p+1;    // doesn't work either
    //double d = 0x1p1;     // doesn't work either
    //double d = 0x1.0p1;   // doesn't work either

    printf( "%f\n", d );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望这打印2,从1x2 ^ 1,但它给了我这个编译错误:

error C2059: syntax error : 'bad suffix on number'
Run Code Online (Sandbox Code Playgroud)

我意识到C++不支持这种语法(或者我已经读过了),但是请注意这是编译的,/TC因此它应该是直接的C,并且我也使用了一个*.c文件名.

我在这里做错了,还是VC9不符合标准?

caf*_*caf 8

您的代码没有任何问题.在C99标准中,浮点十六进制常量被添加到C中,但MSVC仅支持较旧的C90标准(带有一些扩展,如//单行注释和long long类型).