Au moins les 31 ou 63 premiers caractères d’un nom interne sont-ils significatifs?

Voici une citation directe du livre (K & R, 2e éd., P. 35):

“Au moins les 31 premiers caractères d’un nom interne sont significatifs. Pour les noms de fonction et les variables externes, le nombre peut être inférieur à 31, car les noms externes peuvent être utilisés par les assembleurs et les chargeurs sur lesquels le langage n’a aucun contrôle. Pour les noms externes , la norme ne garantit que 6 caractères et un seul cas. ”

Et dans C99, ses noms internes ne sont pas limités en longueur, mais seuls les 63 premiers sont garantis comme significatifs (§5.2.4.1 Limites de traduction).

Ma question est la suivante: pourquoi ces limites sont-elles spécifiquement 31 ou 63 ? Pourquoi ce numéro en particulier? Pourquoi pas 19, 24 ou tout autre numéro? S’il s’agit d’un problème de mise en œuvre, y a-t-il un avantage à passer de 31 à 63 ?

Les rédacteurs de compilateur / éditeur de liens associés à un comité de conception de langage imposent généralement certaines limites afin de pouvoir émettre des hypothèses lors de la mise en œuvre de la chaîne d’outils ou dans les formats de fichier binary (par exemple, ELF , COFF , etc.). Les nombres 31 et 63 ont probablement été choisis simplement parce qu’ils sont 2 n -1 et les programmeurs aiment 2 n pour une raison idiote. La valeur -1 doit généralement tenir compte d’un caractère _ ou d’un caractère NUL dans le nom.