Programmsprache C, typedef?

...komplette Frage anzeigen

2 Antworten

Ja. Musst Du sogar teilweise. Beispielsweise beim Bau einer linearen Liste, wo in der struct ein Selbstbezug enthalten ist.

Da gibt es nämlich sprachtechnisch einen großen Unterschied zwischen "struct XY" und typisierten Strukturen. Der Name "struct XY" ist VOR Deklaration der Inhaltselemente bereits nutzbar und "reserviert". Der per "typedef" draufgelegte Name hingegen wird erst im Namensraum verfügbar, wenn das komplette "typedef"-Statement bis zum Ende ausgeparsed wurde.

Ich hab morgen eine Klausur, also wenn das mit typedef umbenennt wurde, sollte ich immer zur Sicherheit den orginalnamen benutzen?

0
@grenzenfrei0

Üblich ist es eigentlich, die typisierten Namen (und nicht die "struct-Namen" im K&R-Stil zu verwenden).

Beispiel:

typedef struct {
char *name,*vorname;
int kdnr;
} kunde;

Das wäre eine typische Deklaration. Und dann halt später:

kunde datensatz={"Nachname","Vorname",42};

oder dynamische Allokation via malloc() und dann Einzelfeldbelegungen.

Konstrukte wie

struct oldschool_liste {
  struct oldschool_liste *next;
  char *data;
};

sind heute eigentlich eher selten. Man gebraucht sie eigentlich nur noch in zwei Fällen:

1. in genau dem Beispiel hier, also wenn ein Selbstbezug da ist.

2. an den Stellen, wo alte C-Standards noch "struct XY" vorgesehen haben. Beispiel "struct tm" im Kontext localtime(), mktime() usw.

1

Ja.

Allerdings bezweifle ich, dass es die Lesbarkeit/Verständlichkeit des Programms verbessert.

Also führt zu keinem Fehler im Programm ?

Ich habs am Anfang ohne typedef gelernt, deshalb komme ich durcheinander wenn kein struct dabei steht

0
@grenzenfrei0

Ob du jetzt typedef verwendest oder den vollen Namen hinschreibst (was ich auch durchasu verstehen könnte) ist in meinen Augen zweitrangig.
Viel wichtiger ist es den Quellcode konsistent zu halten, also den gleichen Typ (die gleiche Struktur) immer mit dem selben Namen anzusprechen, damit man den Code gut nachvollziehen kann.

Dem Programm selbst sollte es aber egal sein, wenn du beide Namen verwendest

1

Was möchtest Du wissen?