1045 Stimmen

typedef struct vs. struct-Definitionen

Ich bin ein Anfänger in der C-Programmierung, aber ich habe mich gefragt, was der Unterschied zwischen der Verwendung von typedef bei der Definition einer Struktur gegenüber der Nichtverwendung von typedef . Meines Erachtens gibt es da keinen Unterschied, sie erreichen das gleiche Ziel.

struct myStruct{
    int one;
    int two;
};

vs.

typedef struct{
    int one;
    int two;
}myStruct;

1 Stimmen

Ich habe gerade hier auf SO gelesen, dass die zweite Option einen Compiler-Fehler verursachen würde?! "Übergabe eines Arguments mit inkompatiblem Zeigertyp" stackoverflow.com/questions/12708897/

8 Stimmen

Eine bessere Antwort (meiner Meinung nach) finden Sie unter aquí .

25voto

Christoph Punkte 157217

In C sind die typspezifischen Schlüsselwörter von Strukturen, Unions und Aufzählungen obligatorisch, d.h. Sie müssen immer den Namen des Typs (seine Tag ) mit struct , union o enum wenn Sie sich auf den Typ beziehen.

Sie können die Schlüsselwörter loswerden, indem Sie eine typedef Dies ist eine Form des Verbergens von Informationen, da der tatsächliche Typ eines Objekts nicht mehr sichtbar ist, wenn es deklariert wird.

Es wird daher empfohlen (siehe z. B. die Linux-Kernel-Kodierungsleitfaden , Kapitel 5), dies nur zu tun, wenn Sie tatsächlich quiere um diese Informationen zu verbergen und nicht nur, um ein paar Tastenanschläge zu sparen.

Ein Beispiel dafür, wann Sie eine typedef wäre ein undurchsichtiger Typ, der immer nur mit den entsprechenden Accessor-Funktionen/Makros verwendet wird.

12voto

Yochai Timmer Punkte 46099

Sie können die Forward-Deklaration nicht mit dem typedef struct .

El struct selbst ist ein anonymer Typ, d.h. Sie haben keinen tatsächlichen Namen, den Sie weitergeben können.

typedef struct{
    int one;
    int two;
} myStruct;

Eine solche Vorwärtserklärung wird nicht funktionieren:

struct myStruct; //forward declaration fails

void blah(myStruct* pStruct);

//error C2371: 'myStruct' : redefinition; different basic types

11voto

PlainOldProgrammer Punkte 2615

Der folgende Code erstellt eine anonyme Struktur mit dem Alias myStruct :

typedef struct{
    int one;
    int two;
} myStruct;

Ohne den Alias können Sie nicht darauf verweisen, da Sie keinen Bezeichner für die Struktur angeben.

6voto

RC. Punkte 26365

El typedef wird, wie bei anderen Konstrukten auch, dazu verwendet, einem Datentyp einen neuen Namen zu geben. In diesem Fall wird dies meist getan, um den Code sauberer zu gestalten:

struct myStruct blah;

vs.

myStruct blah;

6voto

jjnguy Punkte 132790

Der Unterschied besteht darin, dass Sie die struct .

Der erste Weg, den Sie gehen müssen:

struct myStruct aName;

Bei der zweiten Möglichkeit können Sie das Schlüsselwort struct .

myStruct aName;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X