Achim S. schrieb:
> Falls Du mehrere enums in einer Struktur hast, könntest Du
> {
> enum ecommands command1 : 8;
> enum ecommands command2 : 8;
> }
> versuchen.
Macht aber Probleme wenn man mal den Offset oder Pointer zu diesem
Member braucht, dann weigert sich der Compiler. Genau das Problem hatte
ich letztens, ich bin also wieder davon abgekommen und bestehe
stattdessen darauf daß mit -fshort-enums kompiliert wird (ist nicht
schwer denn das ist im zugehörigen Makefile festgelegt).
Erzwingen kann man das auch mit einem compile-time assert auf ein
sizeof()
1 | _Static_assert (sizeof(enum foo) == 1, "this code must be compiled with -fshort-enums");
|
und ein paar Worten Dokumentation gleich daneben so daß wenn irgendwer
in 12 Jahren den Code wieder ausgräbt und mit dem "falschen" Compiler
oder den falschen Optionen kompilieren will ihm das schon beim
Compilieren um die Ohren fliegt und er weiß nach welchem
Compilerschalter er suchen muss (jeder anständige Compiler wird eine
vergleichbare Option haben, erst recht in der Zukunft in der alles noch
viel ausgereifter sein wird als es heute schon ist). Und vielleicht
gibts bis dahin auch gar kein C mehr.