typedef oder #define (C)
Verfasst: 07.05.2024, 15:35
Schönen Nachmittag liebe zfx'ler
Ich habe mir jetzt Zwecks Komfort und Übersicht meine eigenen Basistypen definiert.
Dabei hab ich mir die stdint.h und stdbool.h bei der Gelegenheit genauer angeschaut.
Was mich erstaunt:
In der stdint.h sind die Typen (hier bei mir) per typedef "umgemünzt". So z. B. auch der size_t
In der stdbool.h sind sie jedoch per #define Makro implementiert
Wenn ich das ganze per typedef umsetze, kriege ich ja vom Compiler so nette Meldungen wie "size_t aka unsigned long long".
Relevanter scheint mir jedoch die Typenprüfung - und die erhalte ich ja ohnehin in beiden Fällen. Denn sobald der Präprozesser drüber war, steht ja bei einem Makro der eigentliche "Ersatztext" da. Und dieser kann dann wiederum vom Compiler entsprechend überprüft werden.
Aber vielleicht gibts ja einen schlauen "Leitgedanken" - wann #define, wann typedef und in welchen Fällen das Eine dem Anderen vorzuziehen ist?
Ausserdem interessant:
In stdbool.h des gcc compilers sind die Makros true und false mit einem entsprechenden cast implementiert
In der Header, die ich beim Clang Compiler finde, wird darauf verzichtet:
Die Prämisse, den Code nicht durch unnötigen "clutter" aufzublähen, finde ich ja eigentlich sehr einleuchtend.
Ist denn der cast zu _Bool (oder bool ab c23) wirklich nötig?
Gruss starcow
Ich habe mir jetzt Zwecks Komfort und Übersicht meine eigenen Basistypen definiert.
Dabei hab ich mir die stdint.h und stdbool.h bei der Gelegenheit genauer angeschaut.
Was mich erstaunt:
In der stdint.h sind die Typen (hier bei mir) per typedef "umgemünzt". So z. B. auch der size_t
Code: Alles auswählen
typedef unsigned long long size_t;
Code: Alles auswählen
#define bool _Bool
Relevanter scheint mir jedoch die Typenprüfung - und die erhalte ich ja ohnehin in beiden Fällen. Denn sobald der Präprozesser drüber war, steht ja bei einem Makro der eigentliche "Ersatztext" da. Und dieser kann dann wiederum vom Compiler entsprechend überprüft werden.
Aber vielleicht gibts ja einen schlauen "Leitgedanken" - wann #define, wann typedef und in welchen Fällen das Eine dem Anderen vorzuziehen ist?
Ausserdem interessant:
In stdbool.h des gcc compilers sind die Makros true und false mit einem entsprechenden cast implementiert
Code: Alles auswählen
#define true ((_Bool)+1u)
Code: Alles auswählen
#define true 1
Ist denn der cast zu _Bool (oder bool ab c23) wirklich nötig?
Gruss starcow