6

In alcuni sistemi il doppio è uguale al doppio lungo. Come è possibile rilevare se il doppio lungo è di precisione estesa rispetto al doppio in fase di compilazione e lo utilizza per la compilazione condizionale.come rilevare se il doppio lungo è di precisione estesa o non in fase di compilazione

Vedo che ci sono macro predefinite presenti in libgcc SIZEOF_DOUBLE e SIZEOF_LONG_DOUBLE Ma non ci sono portabile su diverse toolchain.

C'è un modo per farlo?

+0

Si potrebbe provare 'sizeof (double)> 8'. Anche se non è portatile, probabilmente funzionerà ancora nella maggior parte dei casi. – Mysticial

+0

Non riesci a testare 'sizeof (double)

+2

Il preprocessore non riconosce 'sizeof'. –

risposta

5

È possibile confrontare DBL_MANT_DIG e LDBL_MANT_DIG da float.h.

1

È possibile testare ad es.

#if DBL_MANT_DIG < LDBL_MANT_DIG 

o simili valori definiti in float.h

0

La soluzione "corretta" a questo problema (come quello usato da molti progetti) è quello di creare uno script di configurazione.

Lo script configure esegue vari test che includono la compilazione e l'esecuzione di piccoli programmi per determinare il compilatore e le proprietà di sistema. Lo script quindi scrive i risultati come un file di intestazione, un makefile o entrambi. Certamente, il tuo può fare qualsiasi cosa tu voglia.

Ci sono strumenti che consentono di eseguire questo tipo di operazione in modo semi-automatico, ma probabilmente sono eccessivi. Se vuoi dare un'occhiata i nomi sono autoconf e automake. Attenzione, non sono semplici da imparare, ma generano script di configurazione e makefile che dovrebbero funzionare su qualsiasi piattaforma, purché abbia una shell in stile Unix e GNU make.

Problemi correlati