Alexander Kornrumpf hat geschrieben: ↑16.09.2023, 18:15
Vielleicht solltest du dazu sagen, ob du versuchst C oder C++ zu schreiben, denn in C++ brauchst du das typedef gar nicht, soweit ich mich erinnere.
Stimmt, entschuldigt das Versäumnis! :-)
Ich dachte hier tatsächlich an
plain C.
Schrompf hat geschrieben: ↑16.09.2023, 22:17
Dass die gleich heißen dürfen, wusste ich nicht.
Guter Punkt. Also ehrlich gesagt fehlt mir jetzt auch eine valide Referenz dafür, dass man das so machen darf. Weder clang noch gcc geben mir in diesem Zusammenhang eine Warnung aus - was ja aber eigentlich noch kein Garant dafür ist, dass dies auch tatsächlich erlaubt wäre. Hmmm...
Krishty hat geschrieben: ↑16.09.2023, 22:28
In meinem C-Code benutze ich gar nichts davon, sondern schreibe explizit
struct Foo hin, wann immer ich es brauche. In C++ lohnt es zwar, den Typ einer Variable wegzuabstrahieren und nur die Semantik abzubilden (
auto everywhere!), aber das geht eben nur in C++ – weil nur C++ erlaubt, eigene Typen zu schreiben, die sich wie ein
int oder ein Zeiger oder sonstwas verhalten, unabhängig davon, ob sie nun als
class oder
enum class oder sonstwas implementiert sind.
In C geht das nicht. Du kannst in C keine Smart-Pointer-Klasse haben, weil ein
struct immer komplett anders zu benutzen sein wird als ein
int *. Es gibt ja keine überladenen Operatoren. COM & Co. versuchen das via Makro, aber dann sieht dein Code eh ganz anders aus.
Deshalb sehe ich nicht recht ein, das
struct wegzu… aliasen? Das nennt man Alias, oder?
Warte.
Ich dachte eigentlich genau das tut
typedef. Damit etabliere ich doch einen neuen Typ? Hast du eine Situation im Kopf, die den Unterschied deutlich macht? So ganz kann ich dir noch nicht folgen.
Soweit ich sehe, wird
typedef oft genutzt, einfach um weniger tippen zu müssen (
struct fällt weg). Jedoch habe ich auch schon aufgeschnappt, dass das aus einem bestimmten Grund (der mir nicht klar ist) potentiell ungünstig sein kann.
Was sind deine Gründe, darauf zu verzichten?
Davon ab ist die Endung _t in POSIX reserviert. So lange du nur auf Windows kompilierst, kann dir das egal sein. Falls du mal auf Linux oder einem anderen POSIX-System kompilieren möchtest, ist das nicht mehr zukunftssicher, weil irgendwann ein Header einen eigenen Typ mit dem selben Namen einführen könnte. Nix Schlimmes, just saying.
Oh! Sehr guter Hinweis, danke!
kein _t anhängen, weil potentiell reserviert!