Eine ähnliche Syntax, aber eine zeigt einen Fehler, eine andere nicht

8

Hiii all

Ich habe dieses Programm heute gemacht

%Vor%

Warum zeigt der erste Fehler, während der zweite nicht? Just () macht ein Programm kompilieren. Warum?

- Shruti

    
shrutisingh 14.08.2010, 16:31
quelle

5 Antworten

9

int a = 1,2; 2 wird als Variablenname behandelt, der nicht mit einer Zahl beginnen kann, daher der Fehler.

int b = (1,2); Kommaoperator wertet die Operanden von links nach rechts aus und gibt den letzten Ausdruck in der Liste zurück, zB 2

    
Prasoon Saurav 14.08.2010 16:36
quelle
6

Innerhalb der Klammern gibt die Sprache an, dass ein Ausdruck auftritt. In diesem Fall ( b ) repräsentiert das Komma den Komma-Operator aus C.

Ohne Klammern gibt die Sprache an, dass Variablendeklarationen durch Kommas getrennt sind. Im Beispiel von a erwartet der Compiler (Parser) zusätzliche Variablendeklarationen.

    
Heath Hunnicutt 14.08.2010 16:34
quelle
3

Der Grund liegt in Ihrer ersten Anweisung int a = 1,2; Das Komma wird nicht als Sequenzoperator geparst. Es ist Teil einer Deklarationsliste und versucht, eine Ganzzahlvariable namens 2 zu instanziieren, die von der Sprache nicht zugelassen wird.

Die Klammern in der zweiten Anweisung int b = (1,2); erzwingen, dass das Komma als Sequenzoperator analysiert wird.

    
Amardeep AC9MF 14.08.2010 16:36
quelle
0

(1,2) berechnet den letzten Ausdruck in der Liste, d. h. 2 .

Ein anderes Beispiel: (a,b,c) würde zu c ausgewertet.

Wenn Sie eine Bruchzahl verwenden möchten, verwenden Sie einen Float / Double-Typ und verwenden Sie den Punkt als Dezimalzeichen: double d = 1.2;

    
ThiefMaster 14.08.2010 16:33
quelle
0

Keiner von ihnen ergab mir auf Anhieb Sinn.

Aber dann erinnerte ich mich an mehrere Operationen in for-Schleifen. ZB:

%Vor%

Wenn Sie wissen, dass 1 ein gültiger Ausdruck ist und dass Ausdrücke gültige Sprachelemente sind, ist meine Schlussfolgerung, dass (1,2) 1 auswertet (tut aber nichts damit) ), wertet dann 2 aus und gibt 2 zurück.

Und schließlich:

%Vor%

Was ist, wertet 1 und 2 wie zuvor aus, gibt 2 zurück und weist es b zu.

    
LatinSuD 14.08.2010 16:37
quelle

Tags und Links