私は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は標準に準拠していませんか?
ありがとうございます。私はそれがそれのようなものだったのではないかと心配しました。私は、C99より前のコンパイラのための10進数の科学記法を出力するスイッチを追加する必要があると思います。 – Kevin