Подумайте о некоторых проблемах, которые могут возникнуть при отсутствии новой строки. В соответствии со стандартом ANSI #include
файл в начале вставляет файл точно так, как он находится в начале файла, и не вставляет новую строку #include <foo.h>
после содержимого файла после. Поэтому, если вы добавите в парсер файл без перевода строки в конце, он будет выглядеть так, как будто последняя строка foo.h
находится на той же строке, что и первая строка foo.cpp
. Что если в последней строке foo.h был комментарий без новой строки? Теперь первая строка foo.cpp
закомментирована. Это всего лишь пара примеров типов проблем, которые могут возникнуть.
Просто хотел указать любым заинтересованным сторонам на ответ Джеймса ниже. Хотя приведенный выше ответ все еще корректен для C, новый стандарт C ++ (C ++ 11) был изменен, так что это предупреждение больше не должно появляться, если используется C ++ и компилятор, соответствующий C ++ 11.
Из стандарта C ++ 11 через сообщение Джеймса:
Исходный файл, который не является пустым и не оканчивается символом новой строки или заканчивается символом новой строки, которому непосредственно предшествует символ обратной косой черты, до того, как произойдет любое такое соединение, должен обрабатываться так, как если бы дополнительный новый символ строки был добавлен в файл (C ++ 11 §2.2 / 1).
cat
файл, и у него нет завершающего символа новой строки, так как новое приглашение оболочки появится после последней строки файла (т.е. не в столбце 0)