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