Sto scrivendo un programma che converte il bytecode CIL in codice sorgente C per il consumo della macchina. Ero preoccupato per l'inaccuratezza delle costanti floating point dovute alla conversione da e verso i decimali. Dopo aver fatto qualche ricerca, ho scoperto che C (ma non C++) dovrebbe essere in grado di accettare una notazione esadecimale per le costanti in virgola mobile.VC che rifiuta la costante esadecimale in virgola mobile
Ho deciso di provarlo, ma MS VC9 mi dà errori, non importa quello che provo. Qui è quello che sto cercando:
// 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;
}
Mi aspettavo questo per stampare 2, da 1x2^1, ma invece mi dà questo errore di compilazione:
error C2059: syntax error : 'bad suffix on number'
mi rendo conto C++ non lo fa Supporta questa sintassi (o così ho letto,) ma nota che questo è compilato con /TC
quindi dovrebbe essere dritto C, e ho usato un nome di file *.c
anche per buona misura.
Sto facendo qualcosa di sbagliato qui, o VC9 non è conforme agli standard?
Grazie per la conferma; Avevo paura che fosse qualcosa del genere. Credo che dovrò aggiungere un interruttore per la notazione scientifica decimale in uscita per i compilatori pre-C99. – Kevin