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:alt text

Isso acontece até o código é compilado nos MBCs e Unicode.

A saída varia na sequência de "?" e "!"...

Qualquer ideia?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top