'??' está sendo convertido em '^' no visual c ++. Por que isso está acontecendo e qual é a saída?

StackOverflow https://stackoverflow.com/questions/2642618

  •  27-09-2019
  •  | 
  •  

Pergunta

'??' é convertido em '^' se eu compilar o programa MN VC ++ e executá -lo

por exemplo

sprintf( ch, "??") 

imprime

^

Mas se eu executar o mesmo código em turbo c/c ++, não existe esse problema. Por que isso está acontecendo no VC ++ no Windows?

Foi útil?

Solução

?? sozinho não é um Trigraph, Apesar ??' corresponde a ^.

Talvez você tenha digitado aqui diferente do que você tem no código e não pode ver a citação única na sua string, porque está muito perto da cotação de fechamento.

Então, no código que você provavelmente tem:

sprintf( ch, "??'");

Outras dicas

Tem certeza de que era uma quarta dupla e não uma única citação? Se foi ?? ', então você acabou de encontrar um Trigraph, que é um "recurso" que Realmente deve ser removido, mas não é devido à IBM não migrar para o UTF-8 do EBCDIC. (As trigrafias foram consideradas para remoção quando o C ++ 0x ainda estava aberto para mudanças, mas a mudança para remover as trigrafias foi veementemente bloqueada pela IBM e seus representantes no Comitê ISO C ++).

o ?? Normalmente, a sequência inicia uma trigraph, mas a sequência "??" Não é uma trigraph, então não deve ser interpretada como tal - talvez haja um bug no compilador - exatamente qual versão você está usando e qual é o código exato (incluindo declarações variáveis)?

Este código imprime "??" Em várias versões do MSVC 6 a VS 2010, como você pode esperar:

char ch[20];
sprintf( ch, "??");
printf( "%s\n", ch);

Mas substitua o snprintf()linha com:

sprintf( ch, "'??'");

e a saída se torna "'^"(Exceto no vs 2010).

Um teste rápido mostra que o VS 2010 desativa o suporte de triglá por padrão (ele imprime "'??'"No 2º teste). No vs 2010, você deve permitir explicitamente o suporte a triglura usando o /Zc:trigraphs opção. Agradável.

Para mais detalhes sobre o que são trigrafs, consulte: Objetivo das sequências de trigráfias em C ++?

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