Почему я должен беспокоиться о добавлении перевода строки в конце каждого файла? - PullRequest
0 голосов
/ 20 июня 2010

Я иногда сталкивался с программным обеспечением, включая компиляторы, которое отказывается принимать или правильно обрабатывать текстовые файлы, которые не заканчиваются символом новой строки.Я даже сталкивался с явными ошибками вида:

без новой строки в конце файла

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

Я что-то здесь упускаю?Почему - или должно - что-либо беспокоиться о том, заканчивается ли файл кажущимся лишним битом пробела?

Ответы [ 2 ]

1 голос
/ 20 июня 2010

Исторически, по крайней мере, в мире Unix «новая строка» или, скорее, U + 000A перевод строки был строкой терминатор .Это резко контрастирует с практикой в ​​Windows, например, где CR + LF - это строка разделитель .

Наивное решение чтения каждой строки в файле состоит в добавлении символов кбуфер, пока не встретится LF.Если все сделано действительно глупо, это проигнорирует последнюю строку в файле, если она не была завершена LF.

Еще одна вещь, которую следует учитывать, - это макросистемы, которые позволяют включать файлы.Строка, такая как

%include "foo.inc"

, может быть заменена содержимым упомянутого файла, где, если последняя строка не заканчивается LF, она будет объединена со следующей строкой.И да, я видел такое поведение с определенным макроассемблером для встроенной платформы.

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

0 голосов
/ 20 июня 2010

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

...