Ir para o conteúdo

Última atualização:2026-10-12

Trigraphs em C++

C++那些事: a remoção dos trigraphs

Antes do C++17, os trigraphs eram um recurso para escrever programas em códigos de caracteres reduzidos como o ISO/IEC 646, introduzido no C89. O ISO/IEC 646 não possui os seguintes caracteres usados em C e, portanto, ?? deve ser usado para escapá-los:

Conteúdo do trigraph Conteúdo substituído
??= #
??( [
??) ]
??< {
??> }
??/ \
??! |
??- ~
??' ^

\? é escapado para evitar a substituição pela tabela de trigraphs.

No C++17 os trigraphs foram removidos; ??= e afins não são mais substituídos.

Exemplo

Antes do C++17:

std::cout << "??=" << std::endl;
std::cout << "??(" << std::endl;
std::cout << "?\?(" << std::endl;

Saída:

#
[
??(

No C++17 e depois:

??=
??(
??(

Hoje em dia, provavelmente porque codificações de caracteres como o Unicode já estão amplamente difundidas, os trigraphs não são mais necessários, e compiladores como o gcc os desativam por padrão.

Tópicos relacionados

Comentários