¿Cuál es el rol exacto de los “caracteres significativos” en C (variables)?

¿Cuál es el rol exacto de los “caracteres significativos” en C, especialmente en el campo de las variables? He leído el tema ” (K&R) Al menos los primeros 31 caracteres … “, pero realmente no entiendo las reglas exactas de los caracteres significativos. Lo único que entiendo bien es que este tema está extinto, ¡pero aún necesito saberlo!

En la norma C actual, ISO / IEC 9899: 2011, sección §5.2.4.1 Límites de traducción dice:

La implementación deberá poder traducir y ejecutar al menos un progtwig que contenga al menos una instancia de cada uno de los siguientes límites: 18)


– 63 caracteres iniciales significativos en un identificador interno o un nombre de macro (cada nombre de carácter universal o carácter de fuente extendida se considera un solo carácter)
– 31 caracteres iniciales significativos en un identificador externo (cada nombre de carácter universal que especifique un identificador corto de 0000FFFF o menos se considera 6 caracteres, cada nombre de carácter universal que especifica un identificador corto de 00010000 o más se considera de 10 caracteres, y cada carácter fuente extendido es considerado el mismo número de caracteres que el nombre del carácter universal correspondiente, si corresponde) 19)

18) Las implementaciones deben evitar imponer límites de traducción fijos siempre que sea posible.
19) Ver ” futuras instrucciones de idioma ” (6.11.3).

§6.11.3 Nombres externos
¶1 La restricción de la importancia de un nombre externo a menos de 255 caracteres (considerando cada nombre de carácter universal o carácter de fuente extendida como un solo carácter) es una característica obsoleta que es una concesión a las implementaciones existentes.

Esto significa que cuando se trata de nombres, los nombres internos que son distintos dentro de los primeros 63 caracteres deben ser tratados como distintos por el comstackdor, pero si está lo suficientemente equivocado como para crear dos (o más) identificadores que difieren solo en el 64º carácter ( los primeros 63 son idénticos, pero el 64º carácter en uno es, digamos, 1 y en el otro es z ), entonces el comstackdor puede legítimamente, y sin advertencia, tratar esos dos identificadores como iguales.

El límite de nombres externos (nombres que afectan al vinculador en lugar del propio comstackdor) puede limitarse a tan solo 31 caracteres. Considerar:

 extern int abcdefghijkjlmnopqrstuvwxyz123456; extern int abcdefghijkjlmnopqrstuvwxyz123457; 

Estas dos declaraciones pueden considerarse como una referencia a la misma variable si el sistema (enlazador) lo limita a 31 caracteres.

Como se indica en la sección de direcciones futuras, cualquier límite inferior a 255 es ‘obsolescente’, lo que significa que no debe limitarse a esto antes de que los nombres tengan 255 caracteres. Pero el estándar aún no establece 255 caracteres como límite.

Historia

Las ediciones anteriores de la norma tenían límites inferiores más pequeños en los límites superiores de la longitud de los nombres. El estándar C89 solo ordenó un monocase de 6 caracteres para nombres externos (pero se consideró como una concesión dolorosa a los enlazadores existentes), por lo que strcmp y StrCmp podrían ser los mismos, como abcdefg y abcdefz . Parte del problema pudo haber sido Fortran; solo requería soporte para nombres de monocase de 6 caracteres, por lo que los enlazadores en sistemas donde se usaba Fortran no necesitaban soportar nombres más largos.

Los límites en C99 fueron los mismos que en C11.

En los viejos tiempos de C, cuando los comstackdores y los progtwigs se ejecutaban en máquinas con memoria muy limitada (piense en kilobytes, no en gigabytes), para guardar la memoria, los comstackdores solo usaban hasta ocho caracteres (en los comstackdores tempranos) de los identificadores (nombres de variables, funciones etc.). Esta es la función de los “caracteres significativos”, es la cantidad de caracteres que el comstackdor utiliza para los nombres en la fuente.

Esto es lo que creo,

Significa que todos los caracteres, después de los primeros 31 caracteres serán ignorados, es decir, los nombres de las variables:

ab..(27 characters)..yz123
ab..(27 characters)..yz578

será tratado como:

ab..(27 characters)..yz

y para que pueda obtener error de restatement …

No hay ningún rol: el número de caracteres significativos es una limitación impuesta por los enlazadores C. El límite de 31 caracteres fue utilizado por los primeros enlazadores.