c++ standards digraphs trigraphs c++17

C++ 1z ¿por qué no eliminar digraphs junto con trigraphs?



standards c++17 (1)

C ++ 1z eliminará los trigraphs. IBM se opuso fuertemente a esto ( here y here ), por lo que parece haber argumentos para ambos lados de la eliminación / no eliminación.

Pero dado que se tomó la decisión de eliminar los trigrafos, ¿por qué dejar los dígrafos? No veo ninguna razón para mantener digraphs más allá de las razones para mantener trigraphs (que aparentemente no pesaron lo suficiente para mantenerlos).


Los trígrafos son más problemáticos para el usuario inconsciente que los dígrafos. Esto se debe a que son reemplazados dentro de cadenas literales y comentarios. Aquí hay unos ejemplos…

Ejemplo A:

std::string example = "What??!??!"; std::cout << example << std::endl;

What|| Será impreso en la consola. Esto es por el trigraph ??! siendo traducido a | .

Ejemplo B:

// Error ?!?!?!??!??/ std::cout << "There was an error!" << std::end;

Nada pasará en absoluto. Esto se debe a que ??/ traduce a / , que escapa al carácter de nueva línea y da como resultado que la siguiente línea sea comentada.

Ejemplo C:

// This makes no sense ?!?!!?!??!??/ std::string example = "Hello World"; std::cout << example << std::endl;

Esto dará un error en las líneas de use of undeclared identifier "example" por las mismas razones que en el Ejemplo B.

Hay problemas mucho más complicados que los trigraphs también pueden causar, pero entiendes la idea. Vale la pena señalar que muchos compiladores emiten una advertencia cuando se realizan dichas traducciones; otra razón más para tratar siempre las advertencias como errores. Sin embargo, esto no es requerido por la norma y, por lo tanto, no se puede confiar en él.

Los dígrafos son mucho menos problemáticos que los trigrafos, ya que no se reemplazan dentro de otro token (es decir, una cadena o un literal de caracteres) y no hay una secuencia que se traduzca en / , por lo que no se pueden producir nuevas líneas en los comentarios.

Conclusión

Aparte del código más difícil de leer, hay menos problemas causados ​​por los dígrafos y, por lo tanto, la necesidad de eliminarlos se reduce considerablemente.