Gibt es eine Erweiterungsfunktion zur Angabe der Größe von C enum
für jeden Compiler?
- GCC
- Clang
- MSVC
Gibt es eine Erweiterungsfunktion zur Angabe der Größe von C enum
für jeden Compiler?
Mit GCC können Sie die genaue Länge nicht angeben, aber Sie können die kürzest mögliche Länge mit -fshort-enums
. Beispiel:
#include <stdio.h>
typedef enum
{
f1, f2
} foo;
int main()
{
printf("%i\n", sizeof(foo));
return 0;
}
Kompilieren:
gcc program.c -fshort-enums
Ausgabe:
1
Wenn Sie jedoch einen Link auf etwas setzen wollen, müssen Sie sicherstellen, dass derjenige, der sich Ihre Kopfzeilen ansieht, auch die -fshort-enums
oder es ist nicht ABI-konform (und Sie werden einige wirklich lustige Fehler sehen).
C++11 hat eine standardisierte Methode dafür eingeführt, aber da es sich um C handelt, müssen Sie sich mit einer einfacheren Methode begnügen, indem Sie die letzte enum INT_MAX
oder einen Wert, der groß genug ist, dass nur der gewünschte Typ ihn aufnehmen kann (so macht es das DirectX SDK). Leider gibt es keine Möglichkeit, eine maximale Größe zu erzwingen (zumindest nicht ohne compilerspezifische Erweiterungen).
Mit clang können Sie dies verwenden:
enum Tristate : char { Yes, No, Maybe };
Wenn Sie möchten, dass typedef
stellen Sie sicher, dass Sie den Größenbezeichner für beide, die enum
und die typedef
Definition:
enum Tristate : char { Yes, No, Maybe };
typedef enum Tristate : char Tristate;
Andernfalls erhalten Sie eine Compiler-Warnung.
Oder Sie definieren eine anonyme enum
y typedef
direkt:
typdef enum : char { Yes, No, Maybe } Tristate;
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.