J'ai remarqué dans une routine pourquoi fonctionne-t-il? p> Qu'est-ce que cela fait? P> P>
3 Réponses :
Un opérateur de virgule est un point de séquence: chaque expression séparée des virgules est évaluée de gauche à droite. Le résultat a le type et la valeur de l'opérande droit. Fonctionnellement, votre exemple est équivalent à (le beaucoup plus lisible?): Voici un autre exemple que la norme prévoit l'opérateur de la virgule (6.5.17): P> dans l'appel de la fonction p>
f(a, (t=3, t+2), c)
de Wikipedia:
Dans les langages de programmation C et C ++, l'opérateur de la virgule (représentée par le jeton,) est un opérateur binaire qui évalue son premier opérande et élimine le résultat, puis évalue le deuxième opérande et le renvoie. valeur (et type). L'opérateur des virgules a la priorité la plus faible de tout opérateur C et agit en tant que point de séquence. P>
L'utilisation du jeton de la virgule en tant qu'opérateur est distincte de son utilisation dans les appels et définitions de la fonction, déclarations variables, énumations, énum. Déclarations et constructions similaires, où il agit comme séparateur. p>
Dans cet exemple, le comportement différent entre les deuxième et troisième lignes est due à l'opérateur de la virgule ayant une priorité inférieure à celle de la mission. P> < Pré> xxx pré>
link: http://fr.wikipedia.org/wiki/comma_opérator < / p> p>
Dans i = a, b; code>, qu'est-ce qui arrive à B code>? Pourquoi écrirait-on B code> dans ce cas?
Pourquoi cela ne devrait pas fonctionner? Il définit % code>, to_hex (* pstr >> 4) code>, to_hex (* pstr & 15) code> au bloc de mémoire séquentielle adressé par PBUF code>. Le code équivalent peut être le suivant: else {
*pbuf = '%';
*(pbuf + 1) = to_hex(*pstr >> 4);
*(pbuf + 2) = to_hex(*pstr & 15);
pbuf += 3;
}
Duplicaté possible de Que fait l'opérateur des virgules, faire?