我已经看到了很多ANSI C编译器必须支持的最低要求,比如函数的31个参数,并且大多数数字似乎都有某种意义。
但是,我看不到在源代码行中支持至少509个字符的原因。 511或512会更有意义,但509似乎是任意的。
这个号码的原因是什么?
答案 0 :(得分:16)
这可能是考虑到可能的CR
+ LF
+ '\0'
字符,并且每行的字符串表示仍然适合512字节的内存。
答案 1 :(得分:3)
C11 dr 5.2.4.1限制与OP给出的限制不同。我怀疑他们来自C89。
逻辑源行中的4095个字符
字符串文字中的4095个字符(连接后)
[编辑] @jwodder建议需要更完整的答案。
我能提供的最佳:512字节是软盘,磁盘和硬盘驱动器媒体最常见的扇区大小,大约在80年代中期到90年代中期,可能与@bizzehdee& @DigitalTrauma对好奇的509限制的想法。
这是一个非常受欢迎的缓冲区大小。
答案 2 :(得分:2)
直接来自this question
或许509旨在允许具有两个字节的512字节缓冲区 用于“\ r \ n”行终止符,一个用于“\ 0”字符串终止符。
答案 3 :(得分:0)
我没有消息来源,但我认为它是两个"
个字符和构成这512个字符的\ 0字符。
我不认为2个字符用于CRLF有两个原因:这些不是你必须在那里写的默认字符,而对于LINUX它只是LF。这就是为什么我说它是两个"
个字符。