12
votes

Qu'est-ce qu'un ensemble de missions séparées par des virgules?

J'ai remarqué dans une routine xxx

pourquoi fonctionne-t-il?

Qu'est-ce que cela fait?

c

1 commentaires

3 Réponses :


13
votes

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?): xxx pré>

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)


0 commentaires

11
votes

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.

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.

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. < Pré> xxx

link: http://fr.wikipedia.org/wiki/comma_opérator < / p>


1 commentaires

Dans i = a, b; , qu'est-ce qui arrive à B ? Pourquoi écrirait-on B dans ce cas?



0
votes

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;
}


0 commentaires