Artigo original: Ternary Operator in C Explained

Programadores usam o operador ternário para a tomada de decisões no lugar das instruções condicionais de if e else mais extensas.

O operador ternário recebe três argumentos:

  1. O primeiro é um argumento de comparação
  2. O segundo é o resultado caso a comparação seja verdadeira
  3. O terceiro é o resultado caso ela seja false

É útil pensar no operador ternário como uma versão abreviada da escrita de uma instrução do tipo if-else. Aqui vemos um exemplo de tomada de decisão simples usando if e else:

int a = 10, b = 20, c;

if (a < b) {
    c = a;
}
else {
    c = b;
}

printf("%d", c);

O exemplo tem mais de 10 linhas, mas isso não é necessário. É possível escrever o programa acima em apenas 3 linhas de código usando um operador ternário.

Sintaxe

condição ? valor_se_verdadeiro : valor_se_falso

A instrução avalia o valor_se_verdadeiro se a condição for atendida e o valor_se_falso se não for.

Aqui vemos o exemplo acima reescrito usando o operador ternário:

int a = 10, b = 20, c;

c = (a < b) ? a : b;

printf("%d", c);

O resultado do exemplo acima deve ser:

10

c é definido como sendo igual a a, pois a condição a < b é verdadeira.

Lembre-se de que os argumentos valor_se_verdadeiro e valor_se_falso devem ser do mesmo tipo. Além disso, eles devem ser expressões simples, não instruções completas.

Os operadores ternários podem ser aninhados, assim como instruções if-else. Considere o código a seguir:

int a = 1, b = 2, ans;
if (a == 1) {
    if (b == 2) {
        ans = 3;
    } else {
        ans = 5;
    }
} else {
    ans = 0;
}
printf ("%d\n", ans);

Aqui está o código acima reescrito usando um operador ternário aninhado:

int a = 1, b = 2, ans;
ans = (a == 1 ? (b == 2 ? 3 : 5) : 0);
printf ("%d\n", ans);

O resultado de ambos os códigos acima deve ser:

3