2013-08-26 7 views
5
int main(void) 
{ 
    int a=0, b=20; 
    char x=1, y=10; 
    if(a,b,x,y) 
    printf("bye"); 
    return 0; 
} 

Wie funktioniert „wenn“ Zustand in der obigen Code Arbeit Arbeit? Würde der Wert von "y" nur von "if" berücksichtigt?if (a, b, c, d) Wie funktioniert das?

+0

Lese http: // Stackoverflow.com/questions/17785206/why-does-this-c-code-compile-what-does-it-do/17785232 # 17785232 –

+0

beginnen, die Antwort zu akzeptieren. – Tirth

Antwort

17

Ja, der Wert des Komma-Operator ist der rechte Operand. Da keiner der anderen Operanden Nebenwirkungen hat, läuft dies auf if (y) hinaus.

+0

heißt das, wenn a, b, c "falsch" wären, selbst dann würde es direkt nur zu y gehen? –

+4

@Deepanshu Nein, [der Komma-Operator] (http://en.wikipedia.org/wiki/Comma_operator) interessiert sich nicht für den Wert von Operanden außer dem letzten. Sie werden alle ausgewertet und das Ergebnis verworfen, es gibt keine [Kurzschlussauswertung] (http://en.wikipedia.org/wiki/Short-circuit_evaluation). – unwind

+0

Wahrscheinlich. Verwenden Sie '&&' oder '||' zusammen mit '(' und ')', wenn Sie einige oder alle davon verwenden möchten. – haneefmubarak

6

Von Wikipedia:

Im C und C++ Programmiersprachen, der Komma-Operator (durch das Token dargestellten) ist ein binärer Operator, seinen ersten Operanden auswertet und verwirft das Ergebnis, und wertet dann der zweite Operand und gibt diesen Wert (und Typ) zurück.

Dies bedeutet, dass nur der letzte Operand auf Wahrhaftigkeit ausgewertet wird, die Ergebnisse der vorherigen Operanden werden verworfen.

In if(a,b,x,y) wird nur die Wahrhaftigkeit von y berücksichtigt und daher wurde y ausgewertet, um als wahr/falsch angesehen zu werden.

In Ihrem Fall y ist gleich 10, die true in C betrachtet, deshalb ist die if Prüfung wertet auch true und der if Block eingegeben werden.

Sie könnten this very popular question auf Stackoverflow für seine Verwendungen (und mißbraucht) zu betrachten.

+2

Ich denke, es ist nur fair, dass eine Frage, die aus Mangel an Forschung zu Recht geschlossen werden sollte, eine Antwort von Wikipedia erhält. –

4

, (Komma) -Operator trennt den Ausdruck.Wenn mehrere Werte in einer runden Klammer eingeschlossen sind, wird der letzte Wert in der runden Klammer der Variablen zugewiesen.

e.g a=(x,y,z); 
then a=z; 

während, wenn

a=x,y,z; 

dann wird obigen Ausdruck ausgewertet (a=x);

Bitte beachten this.

+1

Komma-Operator hat die geringste Priorität. – ajay

+2

@YuHao Natürlich wird das kompilieren ... es definiert a, y und z und initialisiert a. Was nicht kompiliert wird, ist "int (a = x), y, z;", was diese Antwort falsch macht. Zu R.S .: Komma ist nur ein Operator in Ausdrücken. '(x, y, z)' ist ein Initialisierungsausdruck, daher ist das Komma ein Operator. Aber Deklarationen sind keine Ausdrücke, also ist "int (a = x), y, z;" Unsinn und dieser Teil Ihrer Antwort sollte neu formuliert werden. –

0

Wie Joey sagte darüber nichts wertet mehr als

if (y) 
    .... 

Es ist wichtig zu beachten, dass, wenn Ihr Code gelesen hatte:

int main(void) 
{ 
    int a=0, b=20; 
    char x=1, y=10; 
    if(a++,b++,x++,y) 
    printf("%d, %d, %d, %d\n", a, b, (int)c, (int)y); 
    return 0; 
} 

Der Ausgang wäre

gewesen
1, 21, 2, 10 

Alle Inkremente wären ausgeführt worden, aber für die Zwecke der Auswertung von t er konditionieren

(a++,b++,x++,y) 

das einzige, das ist die letzte von Bedeutung, nämlich y

Verwandte Themen