opérateur ? : opérateur conditionnel (opérateur ternaire).
Syntaxe:
COND ? E2 : E3
Description:
COND est évalué en premier.
Si la valeur est différente de 0, E2 est évalué et E3 est ignoré.
Si COND est égal à 0, E3 est évalué mais E2 ne l'est pas.
Le résultat de COND ? E2 : E3 correspond à la valeur de E2 ou à celle de E3 suivant le cas.
Dans l'expression COND ? E2 : E3, l'opérande COND doit être de type scalaire. Les opérandes E2 et E3 doivent obéir à l'une des règles ci-dessous:
- 1. Tous deux sont de type arithmétique.
Dans ce cas, aussi bien E2 que E3 se voient appliquer les conversions arithmétiques habituelles et le type du résultat est le type commun résultant de la conversion.
- 2. Les deux opérandes sont de type structure ou union compatibles. Dans ce cas le type du résultat est le type de la structure de E2 et E3.
- 3. Les deux opérandes sont de type void *. Dans ce cas le résultat est de type void.
- 4. Les deux opérandes sont de type pointeur sur une version qualifiée ou non de types compatibles. Dans ce cas le type du résultat est un pointeur sur un type qualifié par tous les types qualifiés des types pointés par les opérandes.
- 5. Un opérande est de type pointeur et l'autre une constante pointeur nulle. Dans ce cas, le type du résultat est le même que celui de l'opérande pointeur.
- 6. Un opérande est de type pointeur sur un objet ou un type incomplet, l'autre étant un pointeur sur une version qualifiée ou non du type void. Dans ce cas le type du résultat est celui de l'opérande qui n'est pas pointeur sur void.
Dans tous les cas COND est évalué en premier. Si la valeur est différente de 0, E2 est évalué et E3 est ignoré.
Si E1 est égal à 0, E3 est évalué mais E2 ne l'est pas.
Le résultat de E1 ? E2 : E3 correspond à la valeur de E2 ou de E3 suivant le cas.
Voir aussi:
Exemple:
#include
int main(void) {
int n1, n2, min; int i;
printf( "Entrez deux nombre entiers :"); scanf("%d%d", &n1, &n2);
min = (n1 < n2) ? n1 : n2;
printf( "Le plus petit des ceux nombres est %d\n", min);
/* Présentation de 100 entiers, à raison de 10 par ligne:
l'expression (i%10==0) ? '\n' : ' '
fournit le caractère retour-chariot pour i=10, 20 ...
et le caractère espace pour les autres valeurs
*/
for(i=1; i<=100; i++)
printf( "%4d%c", i, (i%10==0) ? '\n' : ' ');
return 0;
}