Imprimir ?? e !! em sequência diferente mostrará uma saída diferente
Pergunta
Eu encontrei uma saída estranha quando escrevo as seguintes linhas de maneira muito simples:
Código:
printf("LOL??!\n");
printf("LOL!!?\n");
Resultado:
Isso acontece até o código é compilado nos MBCs e Unicode.
A saída varia na sequência de "?" e "!"...
Qualquer ideia?
Solução
Você pode tentar
printf( "What?\?!\n" );
Na programação de computadores, dígraphs e trigrafos são seqüências de dois e três caracteres, respectivamente, que são interpretados como um caractere pela linguagem de programação.
Alguns compiladores suportam uma opção para desativar o reconhecimento de trigrafos ou desativar as trigrafias por padrão e exigem uma opção para ativá -las. Alguns podem emitir avisos quando encontram trigrafs nos arquivos de origem. A Borland forneceu um programa separado, o pré -processador de Trigraph, a ser usado somente quando o processamento de trigraph é desejado.
Outras dicas
??!
é um Trigraph que é substituído por |
.
Como regra, você nunca deve colocar dois caracteres de marcas de interrogação em qualquer lugar em um arquivo de origem.
Eles são chamados Sequências Trigraph
??!
é a sequência de tigraph para barra vertical |
.
O pré -processador C/C ++ reconhece as trigrafias e as substitui por seu caráter equivalente.
Então, quando seu código é visto pelo compilador, os triprafos já estão substituídos.
# grepping in the source file:
$ grep printf a.c
printf("foo: ??!");
# grepping the preprocessor output:
$ gcc a.c -trigraphs -E | grep printf | grep foo
printf("foo: |");
O ??! é conhecido como Trigraph e é substituído por | na saída. Verifique isso link
É uma sequência especial de caracteres em uma constante de string que tem um significado especial. Chamados de trigraph, eles foram originalmente implementados porque nem todos os terminais apoiavam alguns caracteres.