白ひげを撫でながら、賢く尊大な声で言います。
FORTRAN と COBOL がコンピューティングの世界を支配していた昔、新興言語の C は既存のツール チェーンに適合する必要がありました。これらのツール チェーンには、短い 6 文字のシンボル (変数と関数) 名のみを処理するリンカー (別名リンカー、別名ローダー) とアセンブラーが含まれていました。
これらのツール チェーンの C コンパイラは、リンカーが使用するオブジェクト ファイルを書き出すときに、変数名と関数名が短いふりをする必要がありました。それは悪いニュースでした。幸いなことに、C プログラム内には、オブジェクト ファイルに表示する必要のないシンボルがたくさんあります。
たとえば、関数の名前...「main」や「sqrt」などは、オブジェクトモジュールに表示される必要があるため、他のオブジェクトモジュールのコードでそれらを使用できます。「extern」スタイルのグローバル変数の名前も同様です。これらは外部名です。
しかし、C プログラム内の他のすべての名前 (たとえば、関数のスコープ内の変数の名前、構造体のメンバーの名前など) は、オブジェクト モジュールにする必要はありませんでした。それらは「内部名」と呼ばれます。
したがって、たとえば、関数内にこれらの C 変数を含めることができます。
int myFavoriteItem;
int myFavoriteThing;
それでいいでしょう。ただし、次のように外部変数として宣言することもできます。
extern int myFavoriteItem;
extern int myFavoriteThing;
システムによっては、これらの名前を 6 文字の長さであるかのようにオブジェクト ファイルに書き出すものがあります (オブジェクト ファイルは長い名前をどう処理すればよいかわからなかったからです)。次に、このように宣言されているかのように、オブジェクト ファイルを調べます。
extern int myFavo;
extern int myFavo;
それらは重複した宣言になります。C コンパイラは、重複した宣言をオブジェクト ファイルに書き込むのではなく、この種のものをキャッチしてエラーをスローする必要がありました。これはプログラマにとって大きな助けとなりました。オブジェクト ファイル内の宣言が重複していると、リンカー エラー メッセージが非常に不明瞭になりました。
あなたが引用した一節は、コンパイラが内部名の少なくとも31文字と外部名の6文字を認識しなければならないと指定しています。最新のコンパイラとツールチェーンには、異なる名前の長さの制限がなくなりました。