20

我已经看到了 ANSI C 编译器必须支持的许多最低要求,例如函数的 31 个参数,而且大多数数字似乎都具有某种意义。

但是,我看不出在源代码行中支持至少 509 个字符的原因。511 或 512 会更有意义,但 509 似乎有点随意。

这个数字的原因是什么?

4

4 回答 4

17

This perhaps is to take account of possible CR + LF + '\0' characters and have a string representation of each line still fit into 512 bytes of memory.

于 2013-10-14T17:07:15.737 回答
3

C11 dr 5.2.4.1 限制与 OP 给出的不同。我怀疑他们来自C89。

逻辑源代码行中有 4095 个字符

字符串文字中的 4095 个字符(连接后)


[编辑] @jwodder 建议需要更完整的答案。

我能提供的最好的:512 字节是大约 80 年代中期到 90 年代中期软盘、软盘和硬盘驱动器媒体最常见的扇区大小,并且可能与 @bizzehdee 和 @DigitalTrauma 对奇怪的 509 限制的想法一起做出贡献。

这是一个非常流行的缓冲区大小。

于 2013-10-14T17:48:07.303 回答
2

直接从这个问题

也许 509 旨在允许一个 512 字节的缓冲区,其中两个字节用于“\r\n”行终止符,一个用于“\0”字符串终止符。

于 2013-10-14T17:12:13.663 回答
0

我没有来源,但我认为是这两个"字符和 \0 字符组成了这 512 个字符。我不认为这 2 个字符用于 CRLF,原因有两个:这些不是您必须在此处编写的默认字符,而对于 LINUX,它只是 LF。这就是为什么我说它是两个"字符。

于 2016-06-28T14:42:51.120 回答