Kann ich eine Variable mit dem gleichen Namen wie einen strukturierten Strukturnamen benennen?

8

Hier ist der Strukturdeklarationscode.

%Vor%

Und wenn ich eine Funktion wie diese schreibe, gibt der Compiler einen Fehler aus. Es heißt cur undeclared before first use .

%Vor%

Nachdem ich die Referenz nachgeschlagen habe, heißt es, dass die typedef nur ein wenig wie #define funktioniert. Es macht einfach eine Ersetzung zur Kompilierzeit. Ist das der Grund, warum der Code nicht kompiliert werden kann?

    
Frank Cheng 14.11.2012, 07:16
quelle

5 Antworten

16

In diesem Code:

%Vor%

Das item in der dritten Zeile wird als Name der Variablen item (der Parameter für die Funktion) und nicht als Typ verwendet. Folglich sieht die dritte Zeile so aus, als ob sie als ein Ausdruck beginnt, der item mit der undefinierten Variable cur multipliziert, was zu Problemen führt; der Rest des Ausdrucks ist auch falsch.

Wenn Sie das nicht möchten, verwenden Sie nicht denselben Namen für einen Typ und eine Variable. Sie werden andere Leute verwirren, auch wenn Sie sich selbst und den Compiler nicht verwirren.

Die Referenzquelle, die besagt, dass typedef und #define gleich sind, sollte aus Ihrer Referenzliste gelöscht werden now ! Wenn es zwei so fundamental verschiedene Konstrukte nicht unterscheiden kann, ist es gefährlich, weil Sie nicht wissen, wann es Sie irreführt (aber das ist ein Fall, in dem es Sie irreführt).

    
Jonathan Leffler 14.11.2012, 07:19
quelle
2

Ein typedef ist nur ein neuer Name für einen bereits existierenden Typ. Defines werden vom Präprozessor behandelt, während Typedefs vom C-Compiler selbst behandelt werden. [kopiert von diesem Link]

Überprüfen Sie diese Frage: Sind typedef und #define gleich in c ?

    
MOHAMED 14.11.2012 07:28
quelle
1

typedef ist nicht vollständig identisch mit #define

Hier ist der Unterschied durch ein Beispiel:

%Vor%

Im Code:

%Vor%     
Omkant 14.11.2012 07:25
quelle
1

Sie sollten -Wshadow verwenden, wenn Sie Ihren Code kompilieren. Dann wird gcc Ihnen sagen, wo Sie falsch liegen. :-) wie folgt:
declaration of ‘item’ shadows a global declaration [-Wshadow]

    
madper 14.11.2012 07:38
quelle
1

Jonathan Leffler hat dir deine Frage beantwortet.

Ich möchte nur hinzufügen: Wenn Sie Ihren Code in C ++ schreiben, müssen Sie nicht schreiben, def, so können Sie Ihre Liste wie folgt implementieren:

%Vor%     
kaspersky 14.11.2012 07:40
quelle

Tags und Links