Подумайте о некоторых проблемах, которые могут возникнуть при отсутствии новой строки. В соответствии со стандартом 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).