Größe von long double in Byte
-
Hi,
gibt es eine Möglichkeit herauszufinden wieviel Bytes ein long double belegt und zwar zur Zeit des "Präprozessorvorgangs"? Ich würde diese Größe gerne in einem
#if size_of_long_double == 12
abfragen.
sizeof(long double) funktioniert ja leider nicht, weil es erst zur Compiletime ausgewertet wird.
-
Es gibt in float.h eine Reihe von nützlichen Konstanten, wenn auch die Größe in Bytes fehlt: http://de.wikibooks.org/wiki/C-Programmierung:_float.h
-
Die Bytelänge von Variablen wie long double ist oder war bisher compilerabhängig und kann mal 10 oder anders sein. Derselbe Code hat dann auf verschiedenen Compilern unterschiedliche Bytelängen. Es hilft wohl nichts, die Abfrage erst im Code durchzuführen und nicht im Präprozessor. Wer mehr weiss, soll es sagen!
-
Mehr zum Spass:
#include <stdio.h> #include <float.h> #include <limits.h> #define LDBL_SIZE__(VAL,BIT) ((VAL&(1<<BIT))?BIT:0) #define LDBL_SIZE_(VAL) (LDBL_SIZE__(VAL,7)+LDBL_SIZE__(VAL,10)+LDBL_SIZE__(VAL,15)) #define LDBL_SIZE ((1+LDBL_SIZE_(LDBL_MAX_EXP)+LDBL_MANT_DIG)/CHAR_BIT) int main() { #if LDBL_SIZE == 8 printf("%s\n", "sizeof(long double) == 8."); #elif LDBL_SIZE == 10 printf("%s\n", "sizeof(long double) == 10."); #else printf("%s\n", "I don't know what sizeof(long double) is."); #endif return 0; }
Funktioniert das mit GCC und sizeof(long double) == 10?
-
Was spricht bei deiner Lösung gegen das hier?
#include <stdio.h> #include <float.h> #include <limits.h> #include <assert.h> #define LDBL_SIZE__(VAL,BIT) ((VAL&(1<<BIT))?BIT:0) #define LDBL_SIZE_(VAL) (LDBL_SIZE__(VAL,7)+LDBL_SIZE__(VAL,10)+LDBL_SIZE__(VAL,15)) #define LDBL_SIZE ((1+LDBL_SIZE_(LDBL_MAX_EXP)+LDBL_MANT_DIG)/CHAR_BIT) int main() { assert(LDBL_SIZE == sizeof(long double)); printf("sizeof(long double) = %d\n", LDBL_SIZE); return 0; }