¿Por qué las palabras clave feas en C11?

14

Actualmente estoy leyendo un borrador de la especificación C11. Las nuevas palabras clave introducidas: _Bool, _Alignof, _Atomic todas se sienten como extensiones personalizadas, en lugar de palabras clave estándar reservadas como struct, union, int .

Me doy cuenta de que el estándar básicamente consiste en extensiones estandarizadas ... pero aún así, ¡esto es horrible! ¡Tal vez pronto terminemos con __Long_Long_Reallylong_Integer_MSVC_2020_t en la norma!

¿Es la compatibilidad con versiones anteriores del código no estándar la única razón del nuevo estilo de las palabras clave?

    
pregunta Vorac 07.05.2013 - 15:06

2 respuestas

19

Imagino que la compatibilidad hacia atrás con el código perfectamente estándar es una razón más importante.

Si agrega una palabra clave que podría haber sido utilizada como un identificador legítimo en el código anterior, creará un montón de dolor, de posibles errores sutiles, especialmente en C, un lenguaje con reglas de análisis de alguna manera complicadas.

Si estos identificadores se usaron como una interfaz pública en algún lugar, agregará dolor a todos los usuarios de esas bibliotecas desafortunadas, que podrían no usar C en absoluto, pero llamar a la biblioteca desde Ruby, Python, etc.

Es por eso que las nuevas palabras clave se ven menos como palabras bonitas y más como hacks atados que las personas tienen menos posibilidades de usar para otro propósito.

    
respondido por el 9000 07.05.2013 - 15:20
8

Los nombres que comienzan con un guión bajo y una letra mayúscula (y cualquier cosa con doble guión bajo) se reservaron para la implementación de la biblioteca estándar / compilador en estándares anteriores.

De Identificadores reservados de C89 y C99:

  

También están reservados para el implementador todos los identificadores externos   comenzando con un guión bajo, y todos los demás identificadores comenzando con   un guión bajo seguido de una letra mayúscula o un guión bajo.

Por lo tanto, en teoría, esas nuevas palabras clave no deberían estar en uso en ningún código escrito anteriormente y eso conduce a una mejor compatibilidad con versiones anteriores que cualquier nombre simple, lo que probablemente sea la única razón.

    
respondido por el Dotti 07.05.2013 - 16:03

Lea otras preguntas en las etiquetas