как начал работать с гсс заметил такую "странность": если в конце файла не стоит новая строка, то компилятор выдаёт предупреждение. под VC такого нет. что за предупреждение и какой от него толк? подумаешь - не поставил ентер..?
стандарт - очень хорошо, только не понятно: зачем? должна же быть причина. не думаю, что для парсера столь большая разница какой файл обрабатывать. обработать символ перевода строки - ничто по сравнению со сложностью обработки синтаксиса.
На самом деле все дело в инклюдах, подробности не найду, но вкратце здесь: http://gcc.gnu.org/ml/gcc/2001-07/msg01120.html
можно предположить, что это связано со средствами ввода, которые существовали давно (типа перфокарт может быть), где выделенной файловой системы не было и где явно нужно было указывать конец файла (в те времена вряд ли с целью форматирования текста оставляли "пустую строку", экономили каждый бит). вот, например, при построчном вводе с терминала самое простое, что можно придумать для указания конца ввода — это пустая строка. в строчном текстовом редакторе ed единственная точка во всей строке — символ окончания ввода.
не ну были же ещё магнитные ленты. там тоже, думаю, надо определять положение конца файла "на месте" (не отходя от кассы). мы ведь не сможем перематывать всё время, чтобы считать оглавление, а оперативку тратить на него — накладно.
Вставлю и я свои 5 коп. Возможно для более эффективного парсинга. Если мы точно знаем последний символ в файле, то выход за его пределы можно проверять только после этого символа. Вставка символа в конце до парсинга это не очень оптимально. Возможно существуют какие-то системы/парсеры, где это актуально.
такой ещё вопросик. а зачем вообще нужен символ перевода каретки в Си/Си++. разве нельзя написать всю программу в одну строку? ну, за исключением разве что директив препроцессора. я это не для практических целей спрашиваю. может быть все директивы препроцессора должны заканчиваться символом перевода строки, а в инклудах, как правило, именно так и происходит. из этого следствие: чтобы препроцессор корректно разобрал последнее #endif и нужен этот перевод?