5

CIL bayt kodunu makine tüketimi için C kaynak koduna dönüştüren bir program yazıyorum. Ondalıktan ve ondan dönüşüme bağlı olarak kayan nokta sabitlerindeki yanlışlıktan endişeliydim. Bazı araştırmalar yaptıktan sonra, C (fakat C++ değil) 'in kayan nokta sabitleri için onaltılık bir notasyonu kabul edebildiğini keşfettim.Onaltılık kayan nokta sabitini reddeden VC

Denemeye karar verdim, ancak ne yaptığımın bir önemi yok MS VC9 bana hata veriyor. 1x2^1 den,

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

bu 2 çıktısını bekleniyor, ama bunun yerine bana bu derleyici hata veriyor:

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

C++ değil fark İşte çalışıyorum budur Bu sözdizimini destekle (ya da okuduğumda), ancak bunun /TC ile derlendiğini fark ettiğinden düz C olmalı ve iyi bir ölçüm için *.c dosya adı kullandım.

Burada yanlış bir şey mi yapıyorum yoksa VC9 standartlara uygun değil mi?

cevap

8

Kodunuzda yanlış bir şey yok. Kayan noktalı onaltılık sabitler C99 standardında C'ye eklenmiştir, ancak MSVC sadece eski C90 standardını desteklemektedir (bazı uzantılarda, // tek satırlı yorumlar ve long long tipi).

+0

Onay için teşekkür ederiz; Korkarım ki böyle bir şeydi. C99 öncesi derleyiciler için ondalık bilimsel gösterim için bir anahtar eklemek zorunda kalacağım sanırım. – Kevin

1

C++ 17 standart, C99 onaltılık kayan nokta değişmezlerinin tam desteğini ekledi. Visual C++ bunları Visual Studio 2017 15.6 sürümünde kullanıma sunacaktır.

İlgili konular