2015-02-24 6 views
5

Betrachten Sie den folgenden Code-Schnipsel Case1:Warum gibt es eine Abweichung in der Arbeit des Komma-Operators in den folgenden Codes?

int main() 
{ 
int a; 
a=printf("hello"),printf("joke"); 
printf("%d",a); 
return 0; 
} 

Case2:

int main() 
{ 
int a; 
a=(printf("hello"),printf("joke")); 
printf("%d",a); 
return 0; 
} 

Case3:

int main() 
{ 
int a; 
a=10>8?(printf("hello"),printf("joke")):printf("hello"); 
printf("%d",a); 
return 0; 
} 

Case4:

int main() 
    { 
    int a; 
    a=10>8?printf("hello"),printf("joke"):printf("hello"); 
    printf("%d",a); 
    return 0; 
    } 

Ich kann den Grund nicht herausfinden, wenn ich Paranthesis in Fall 2 verwende, dann bekomme ich die Ausgabe als hellojoke4, während ich Parantheis ohne die Ausgabe als hallojoke5 bekomme.

Wie bei der Ausgabe ist es, wenn ich versucht mit ternären Operator, dann der gleiche Ausdruck, wenn mit Paranthese oder ohne Paranthese ausgeführt, gibt den letzten Ausgabewert der printf-Anweisung, die hallojoke4 ist, so wie unterscheidet sich das Verhalten insgesamt der Fall des ternären Betreibers. Und wie wirkt sich das Vorhandensein von Paranthese auf die Arbeit des Kommas aus, wirkt es wie ein Trennzeichen oder als Operator?

+2

darüber nachdenkt. Was könnten Klammern in diesem Fall tun? – juanchopanza

+0

'int a = (1,2);' '' 'hat niedrigere Priorität so' a = 2' – Gopi

Antwort

9

Es liegt an der niedrigen Priorität des Komma-Operators. Ohne Klammern wird der Ausdruck gruppiert als

(a=printf("hello")), printf("joke"); 

Also, eine Zuordnung zu a von der ersten printf, durch die zweite printf gefolgt. Im zweiten Beispiel wird das Ergebnis der zweiten printfa zugewiesen.

Zur Vereinfachung:

a = 1, 2; // (a = 1), 2; post-condition a==1 
a = (1, 2); // a = (1, 2); is equivalent to a = 2; post-condition a==2 
+0

Das ist, was ich nicht verstehen kann die Tatsache, warum durch die Verwendung von Paranthese das Ergebnis ändert, tatsächlich wie das Compiler analysiert dieses Ding und gibt den letzten Operandenwert zurück. –

+2

@RADHAGOGIA Das ist, was ich in meiner Antwort erkläre. Welchen Teil verstehst du nicht? Weißt du, was der Komma-Operator macht? – juanchopanza

Verwandte Themen