5

私はCILバイトコードをマシンの消費のためのCソースコードに変換するプログラムを書いています。私は10進数への変換と小数点からの変換による浮動小数点定数の不正確さを懸念していました。いくつかの研究をした後、私はC(しかしC++ではない)が浮動小数点定数の16進表記を受け入れることができることを発見しました。VCが16進浮動小数点定数を拒否する

私はそれを試してみることにしましたが、MS VC9は何を試してもエラーになります。私はこれが1×2^1から、2をプリントアウトすると予想、代わりにそれは私にこのコンパイラエラーを与える

// 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; 
} 

を::

error C2059: syntax error : 'bad suffix on number' 

私はC++にはない実現ここで私がしようとしているものですこの構文をサポートしていますが、これは/TCでコンパイルされていることに注意してください。これはまっすぐなCでなければなりません。また、*.cというファイル名を使ってもよいでしょう。

私はここで何か間違っているのですか、VC9は標準に準拠していませんか?

答えて

8

あなたのコードに問題はありません。浮動小数点の16進定数はC99標準ではCに追加されましたが、MSVCは古いC90標準(一部の拡張子は//単線​​コメント、long longタイプなど)のみをサポートしています。

+0

ありがとうございます。私はそれがそれのようなものだったのではないかと心配しました。私は、C99より前のコンパイラのための10進数の科学記法を出力するスイッチを追加する必要があると思います。 – Kevin

1

C++ 17標準では、C99の16進浮動小数点リテラルを完全にサポートしています。 Visual C++には、Visual Studio 2017 15.6リリースで使用できるようになります。

関連する問題