ANSI Cコンパイラがサポートしなければならない最小限の要件は、関数の31個の引数と同じようにサポートされていますが、ほとんどの数値は意味をなさないようです。最小文字数509の理由
しかし、ソース行に少なくとも509文字をサポートする理由はわかりません。 511または512はより意味をなさないが、509は恣意的と思われる。
この番号の理由は何ですか?
ANSI Cコンパイラがサポートしなければならない最小限の要件は、関数の31個の引数と同じようにサポートされていますが、ほとんどの数値は意味をなさないようです。最小文字数509の理由
しかし、ソース行に少なくとも509文字をサポートする理由はわかりません。 511または512はより意味をなさないが、509は恣意的と思われる。
この番号の理由は何ですか?
おそらくCR
+ LF
+ '\0'
文字を考慮し、各行の文字列表記が512バイトのメモリに収まるようにします。
あなたは非常に確信しています - あなたには引用がありますか?私はこの話題で何かを見つけることができません。 C99が文字列リテラルとソース行の制限を4095に引き上げたことを考えると、この選択はより恣意的に見えます。または、少なくとも、2つの選択肢のうちの1つ(2^n-1または2^n-3)が任意であるようです。 –
@MattB。 - 引用なし - 申し訳ありません:(。これはちょうど教育された推測に基づいています。おそらく、C99が登場する頃には、各行の文字列表現に 'CR'または' LF'文字を格納する必要はありません。もっと推測して、恐れています。 –
おそらく509から2バイト「の\ r \ n」ラインターミネータ用 と「\ 0」文字列終端のための1つの512バイトのバッファを可能にするために意図されています。
C11 DR 5.2.4.1制限はOPによって与えられるよりも異なります。私は彼らがC89から来たと思う。論理ソース行の
4095文字(連結後の)文字列リテラルで
4095文字
[編集] @jwodderは、より完全な答えが必要でしたが示唆されました。
ベスト私が提供することができます:512のバイトは、90年代半ばに半ば80年頃のフロッピーディスケットとハードドライブのメディアのための最も一般的なセクタサイズだった可能性が貢献し、好奇心509制限するよう@bizzehdeeとともに& @DigitalTrauma思考。
これは非常に一般的なバッファサイズでした。
私はソースがありませんが、私はそれがこれらの512文字を構成する2つの"
文字と\ 0文字だと考えました。 2つの理由から2つの文字がCRLF用であるとは思わない:これらの文字はデフォルトの文字ではなく、LINUXの場合はLFだけです。だから私はそれが2つの"
文字だと言います。
参照:http://stackoverflow.com/questions/11488616/why-is-max-length-of-c-string-literal-different-from-max-char質問自体は重複ではありませんが、いくつかの回答とコメントがあります。 –
@ Ryan Hainingは、過去10年間に作成されたコンパイラからの509に関する「ANSI Cコンパイラ」要件のいずれかですか? – chux
@ Ryan Haining: "ANSI C"の日付は1989年である。その日のコンピュータの状態(1 MBのPCは最終的にはまれではない)を考えると、メモリを節約しているコンパイラライターとCの標準の間の闘いを想像することができる。すべてのパラメータに対してある種の絶対最小値を宣言します。その標準はCR/LFのペアでオフになっているのは完全に良い説明です。 4095 ...私は自分のコードをチェックしなければならないだろうが、私はこれまでに509文字以上を読んでいたかったとは思わない。 – usr2564301