J'aimerais savoir si dans l'opérateur ternaire dans la langue C, tous les paramètres sont obligatoires? EG:
(expr1 ? value1: value2);
3 Réponses :
La norme C (faire référence à expression conditionnelle: em> Vous parlez d'un Extension du compilateur . La forme p> retourne réellement citant le Documentation en ligne pour L'opérande intermédiaire dans une expression conditionnelle peut être omis. [...] p>
Par conséquent, l'expression p>
C11 code>) ne mentionne rien d'omettre le deuxième opérande. Il spécifie tous les trois opérandes de la forme
        ... Em> Logique-OR-Expression em>
          Logique-ou-expression em> ? Code> expression em>
: code> expression conditionnelle em> p>
BlockQuote>
exp1 code>, si
exp1 code> est évalué vers true. P>
GCC code>, P>
x ? : y
Pouvons-nous sauter la partie si fausse aussi?
NVM, la citation à Serge Répondre clarifie. J'ai demandé si la valeur 2 code> peut être omise.
@Eugenesh. Amende. Je viens d'ajouter un peu plus de contexte. J'espère que c'est utile. :)
Dans ce cas (le dernier paragraphe), il serait incorrect de dire qu'il est équivalent à x? x: y code> @Serge
@Eugenesh. Cet exemple est dans le contexte de l'exemple réel dans les documents en ligne. Il mentionne également "Dans ce cas simple, la capacité d'omettre l'opérande du milieu n'est pas particulièrement utile ....." I> :)
@Souravghwhosh Une question plus, vous dites "a la valeur de x si c'est non nulle", que se passe-t-il si vous écrivez x ?: Y et X Is Zero?
@annacoobs Ensuite, selon la propriété de Ternary opérateur, le troisième opérande y code> est évalué et la valeur de cela devient le résultat. :)
Même si les compilateurs ajoutent des extensions, il est fortement recommandé de ne pas les utiliser car ils brisent la portabilité et la compatibilité de votre code sur les différents compilateurs. La plupart des extensions de GCC ont été créées pour le système d'exploitation Linux (tandis que celui-ci ne semble pas corriger un problème technique, les autres extensions avaient). Alors utilisez votre clavier et n'ayez pas peur de 1 ~ 20 coups de frappe supplémentaires.
Ce n'est pas une norme, mais Extension GCC (Peut-être d'autres compilateurs font de même):
5.7 Conditionnels avec des opérandes omis P>
L'opérande intermédiaire dans une expression conditionnelle peut être omis. Puis si Le premier opérande est non nul, sa valeur est la valeur de la expression conditionnelle. P>
Par conséquent, l'expression p>
x ? x : y
Vous voudrez peut-être noter que si x code> représente une expression complexe, elle ne sera évaluée qu'une seule fois.
La déclaration
(exp1 ? exp1 : value2);
Dupliqué possible de opérateur conditionnel ('?') Avec un deuxième paramètre vide a >