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
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
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.
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.
(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;
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.
Tags und Links c operator-precedence