Optimierter enum Einsatz ?
-
Wozu machen einige C Programmierer folgendens:
enum eFarbe { GELB, BLAU }; unsigned char Farbe;
und nicht:
typedef enum eFarbe { GELB, BLAU }; eFarbe Farbe;
Vermutlich spart man sich hier ein Byte (enum = int) und kann damit wesentlich mehr typunsichere Operationen durchführen.
Aber warum macht man das ?
-
Bitte ein Bit schrieb:
Vermutlich spart man sich hier ein Byte (enum = int)
siehe unten
Bitte ein Bit schrieb:
Aber warum macht man das ?
weil man oder der compiler -fshort-enums
-
weil man oder der compiler -fshort-enums ;) ^- nicht kennt
-
Ich schätze, dass -fshort-enums bei unvollständigen Typen (Vorausdeklarationen) zu ineffizientem Code führen kann. Außerdem benutzen manche enums nur als eine Form, Konstanten zu definieren, und interessieren sich nicht für den dadurch definierten Typ. Das ist schließlich C.
-
Das ist schließlich C.
Arg...
Man kann meines Erachtens einigermaßen sauber in C programmieren, aber diese Mikrooptmierung in C emfinde ich als unsauberen Code, eben wegen der mangelnden Typsicherheit.
Selbst auf einem Mikrokontroller mit wenigen kByte Speicher (RAM, Flash) habe ich keine Rücksicht darauf genommen und es hat mich nicht gebissen (keine Speicher/ Timing Probleme). Da hat mich eher die Implementierungsgröße von sprintf auf dem Kontroller gestört.
-
Bitte ein Bit schrieb:
Man kann meines Erachtens einigermaßen sauber in C programmieren, aber diese Mikrooptmierung in C emfinde ich als unsauberen Code, eben wegen der mangelnden Typsicherheit.
Wenn du Typsicherheit willst, nimm C++
-
Jop, in C++ gibt's sogar
enum type1 : unsigned char { blubb1 = 55, blubb2 = 42, }; enum class type2 : unsigned short { blubb3, blubb4, }; int main() { type1 t1 = blubb2; type2 t2 = type2::blubb3; t1 = t2; // fehler t2 = t1; // fehler std::cout << t1 << '\n'; // wird als Zahl ausgegeben std::cout << t2 << '\n'; // fehler blubb1; blubb3; // fehler, falscher namespace }
Mikrooptimierungen und dazu noch sauber.