0

これが本からの直接の引用です(K&R、第2版、35ページ):

「少なくとも内部名の最初の31文字は重要です。関数名と外部変数の場合、言語が制御できないアセンブラーとローダーによって外部名が使用される可能性があるため、数は31未満になる可能性があります。外部名の場合、標準では、6文字と1つのケースのみが保証されています。」

また、C99では、内部名に長さの制限はありませんが、最初の63のみが重要であることが保証されています(§5.2.4.1変換制限)。

私の質問は、なぜこれらの制限が具体的に31または63なのかということです。なぜこの数なのか?なぜ19、24または他の数ではないのですか?実装の問題である場合、31または63にすることによるメリットはありますか?

4

1 に答える 1

8

言語設計委員会に関連するコンパイラー/リンカーライターは通常、ツールチェーンの実装または付随するバイナリファイル形式( ELFCOFFなど)で仮定を立てられるように、いくつかの制限を課します。31と63の数字は、おそらく2 n -1であり、プログラマーはなんらかの愚かな理由で2nが好きだからです。-1は通常、名前の先頭_または末尾のNUL文字を表すためのものです。

于 2012-04-13T13:13:48.740 に答える