2010-11-15 1 views
1
void main() 
int a,b,c; 
c=(a,b) 

Cela donne c=b toutA propos de l'utilisation des parenthèses dans C

c=a,b 

donne c=a.

Quelle est la raison de ces deux raisons?

+3

N'utilisez pas 'void main()' - les gens s'en fâchent. La norme est 'int main (void)' ou 'int main (int argc, char ** argv)'. –

+0

Absence des parenthèses {} de main. – abelenky

Répondre

11

Dans cette ligne:

c=(a,b) 

Les parenthèses signifient, "évaluer l'expression a,b d'abord, puis attribuez-lui la valeur à c." Dans ce cas, b est affecté, car il s'agit de l'expression de droite de a,b. En C, comma expressions sont évalués de gauche à droite, la valeur globale étant celle de l'expression la plus à droite.

Alors que dans cette ligne:

c=a,b 

L'affectation est évaluée comme tout le côté gauche d'abord, qui est c=a. En effet, l'opérateur égal = a priorité sur l'opérateur virgule ,. Par conséquent, b n'est pas affecté à c. Il est équivalent à:

(c=a),b 
3

En C, l'opérateur virgule évalue le premier opérande, puis jetez et évalue ensuite l'opérande de droite. Donc, le résultat est le bon opérande. Et il a la priorité la plus basse.

c = (a,b)

() a une priorité supérieure à, donc a, b évalue en premier. Le résultat est b. Donc c = b.

Cependant, lorsque c = a, b affectation = ont une priorité plus élevée. Donc c = a évalue en premier. Ainsi a est assigné à c.

Vérifiez this pour plus de détails.