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?
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?
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
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.
N'utilisez pas 'void main()' - les gens s'en fâchent. La norme est 'int main (void)' ou 'int main (int argc, char ** argv)'. –
Absence des parenthèses {} de main. – abelenky