'??' está siendo convertida en '^' en Visual C ++. Por qué está sucediendo y lo que es la salida?

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

  •  27-09-2019
  •  | 
  •  

Pregunta

'??' se convierte en '^' si el programa de compilación mn VC ++ y ejecutarlo

por ejemplo.

sprintf( ch, "??") 

imprime

^

Pero si corro el mismo código en Turbo C / C ++, no hay tal problema. Por qué está sucediendo en VC ++ en Windows?

¿Fue útil?

Solución

?? solo no es un trigraph , aunque ??' corresponde a ^.

Tal vez las ha escrito aquí diferente de lo que se tiene en el código y no se puede ver la comilla simple arrastrando en su cadena porque es demasiado cerca de la cotización de cierre.

Así que en código es probable que tenga:

sprintf( ch, "??'");

Otros consejos

¿está seguro de que era una doble cita y no una comilla simple? Si era ??', entonces has encontrado con un solo trigraph , que es un " característica" que realmente debe ser eliminado, pero no se debe a IBM no migrar a UTF-8 de EBCDIC . (Tri-grafos se consideraron para la eliminación cuando C ++ 0x todavía estaba abierta para los cambios, pero el movimiento para conseguir trigrafos retirados fueron vehementemente bloqueados por IBM y sus representantes en comité de la ISO C ++).

El ?? generalmente secuencia comienza un trigraph, pero la secuencia "??" No es un trigraph por lo que no debe interpretarse como tal - tal vez hay un error en el compilador - exactamente qué versión está usando, y lo que es el código exacto (incluyendo las declaraciones de variables)

Este código imprime "??" en varias versiones de MSVC 6 a VS 2010 como se podría esperar:

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

Pero sustituir el snprintf()line con:

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

y la salida se convierte en "'^" (excepto en VS 2010).

Una prueba rápida muestra que el apoyo VS 2010 desactiva trigraph por defecto (se imprime "'??'" en la segunda prueba). En VS 2010 tiene que habilitar explícitamente el apoyo trigraph usando la opción /Zc:trigraphs. Niza.

Para más detalles sobre lo que se trigrafos, ver: de secuencias trigraph en C ++?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top