максимальный размер printf / fprintf в соответствии с c99 - PullRequest
4 голосов
/ 14 ноября 2011

Стандарт C99 говорит:

Количество символов, которое может быть получено при любом отдельном преобразовании должно быть не менее 4095

Означает ли это, что максимальный размер равен 4095, если да, то почему он говорит "по крайней мере"?

Ответы [ 4 ]

9 голосов
/ 14 ноября 2011

Вы нашли один из наиболее раздражающих аспектов спецификаций языка Си. Они обычно не говорят, что такое максимум. Вместо этого они обычно говорят, что наименьшее допустимое значение для максимума .

Они признали, что разные среды аппаратного обеспечения / компилятора / компоновщика имеют разные ограничения, поэтому оставили большинство ограничений отдельным авторам инструментов. Однако они хотели обеспечить некоторую степень переносимости между средами, поэтому они указали наименьшие значения, которые могут принимать максимумы .

Вот так мы получили ограничения, такие как только первые 8 символов идентификаторов, которые учитывались при устранении неоднозначности символов - они не хотели, чтобы какой-либо разработчик имел дело с более длинными идентификаторами, поэтому они сказали «наименьшая максимальная» длина было 8.

Здесь та же история - они хотели, чтобы программисты могли использовать преобразование приличного размера, но признали, что некоторые платформы могут не справиться с огромными преобразованиями - поэтому они установили размер достаточно большой, чтобы большинство программистов никогда не знали о пределе, но достаточно маленький, чтобы некоторые реализации могли выполнять только минимум и при этом соответствовать.

2 голосов
/ 14 ноября 2011

Реализующие компиляторы должны разрешать не менее 4095 символов, но допускается больше.

0 голосов
/ 21 июня 2012

Стандарт C не определяет максимум. Что они указывают, так это минимальное значение, максимально допустимое значение.

0 голосов
/ 14 ноября 2011

«по крайней мере» означает, что это минимум, а не максимум.

Реализации должны поддерживать как минимум так много, но могут поддерживать больше.

...