Почему рекомендуется иметь пустую строку в конце исходного файла?

Некоторые инструменты стиля кода рекомендуют это, и я помню, как некоторые инструменты командной строки unix предупреждают о том, что пустая строка отсутствует.

В чем причина наличия лишней пустой строки?

Ответ 1

Многие старые инструменты ошибочно работают, если последняя строка данных в текстовом файле не заканчивается символом новой строки или символом возврата каретки/новой строки. Они игнорируют эту строку, поскольку она заканчивается вместо ^ Z (eof).

Ответ 2

Если вы попытаетесь объединить два текстовых файла вместе, вы будете намного счастливее, если первая закончится символом новой строки.

Ответ 3

Кроме того, что это более удобная позиция курсора при перемещении в конец файла в текстовом редакторе.

Наличие новой строки в конце файла обеспечивает простую проверку того, что файл не был усечен.

Ответ 4

Аргумент также может быть задан для более чистых разностей, если вы добавляете в файл по той же причине, что и . Почему в списке допускаются конечные запятые?

Следующее скопировано (и немного обрезано) из связанного ресурса:

Изменение:

s = [
  'manny',
  'jack',
]

чтобы:

s = [
  'manny',
  'jack',
  'roger',
]

включает только однострочное изменение в diff:

  s = [
    'manny',
    'jack',
+   'roger',
  ]

Это лучше, чем запутанная многострочная разность, когда конечная запятая была опущена:

  s = [
    'manny',
-   'jack'
+   'jack',
+   'roger'
  ]

Ответ 5

Пустая строка в конце файла отображается так, что стандартное чтение из входного потока будет знать, когда прекращать чтение, обычно возвращает EOF, чтобы указать, что вы достигли конца. Большинство языков могут обрабатывать маркер EOF. Именно по этой причине из старых дней в DOS маркер EOF был клавишей F6 или Ctrl-Z, для систем * nix это был Ctrl-D.

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

Старые инструменты ожидали пустую строку, за которой следует маркер EOF. В настоящее время инструменты могут обрабатывать пустую строку и игнорировать ее.

Ответ 6

Также, когда вы изменяете файл и добавляете какой-то код в конец файла - diff (не менее git diff в стандартном контингации), вы увидите, что вы изменили последнюю строку, а единственное, что вы на самом деле сделали - добавили символ новой строки. Поэтому отчеты cvs становятся менее удобными.

Ответ 7

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

Ответ 8

Это из-за определения, что такое текстовый файл. Когда вы создаете новый текстовый файл в любой среде Unix, его содержимое представляет собой символ новой строки '\n'

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