[C] EOL в конце файла
Если в хедере последней строчкой - #define какой-нибудь ...
что ты сказал?
Если файл не заканчивается на EOL, возможно возникнут трудности у препроцессора, если этот файл кто-то заинклюдит.
а ты что сказал?=)
ну в чем трудность-то?
поставить самому этот ньюлайн?
это может изменить функциональность?
ну в чем трудность-то?
поставить самому этот ньюлайн?
это может изменить функциональность?
Да, может.
поставить самому этот ньюлайн?Может пусть вообще программу за тебя напишет ?
может сделать ворнинг, когда два пробела подряд стоит?
ато он мучается и убирает их=\
ато он мучается и убирает их=\
вопрос все же считаю открытым
почему ругается компилятор?
ведь должно быть более нормальное объяснение, чем тут привели уже.
почему ругается компилятор?
ведь должно быть более нормальное объяснение, чем тут привели уже.
а чем тебе это не нравится?
в препроцессоре перевод строки это значащий символ.
если в конце файла нет перевода тогда возможно образование команд препроцессора разбросанных по нескольким файлам - что плохо, т.к. не позволяет обрабатывать файлы по отдельности.
в препроцессоре перевод строки это значащий символ.
если в конце файла нет перевода тогда возможно образование команд препроцессора разбросанных по нескольким файлам - что плохо, т.к. не позволяет обрабатывать файлы по отдельности.
Потому что Си --- это УНИКС,
а в УНИКС каждая строка должна быть завершена.
Всё остальное --- отговорки.
---
A24: Проявления suxx-а неисчислимы.
а в УНИКС каждая строка должна быть завершена.
Всё остальное --- отговорки.
---
A24: Проявления suxx-а неисчислимы.
необходимый перенос строки уже есть после команды
#include "myfile.h"
ведь ругается препроцессор, а не компилятор, как я понимаю
#include "myfile.h"
ведь ругается препроцессор, а не компилятор, как я понимаю
необходимый перенос строки уже есть после командыэтот перенос строки является частью команды препроцессора.
#include "myfile.h"
1. Никто не мешает препроцессору вставлять недостающий конец строки.
2. Если препроцессор считает, что файл должен быть текстовым в понятиях уникс,
то он может отругаться, но поставить недостающий конец строки.
---
A24: Проявления suxx-а неисчислимы.
2. Если препроцессор считает, что файл должен быть текстовым в понятиях уникс,
то он может отругаться, но поставить недостающий конец строки.
---
A24: Проявления suxx-а неисчислимы.
если в конце файла нет перевода тогда возможно образование команд препроцессора разбросанных по нескольким файлам - что плохо, т.к. не позволяет обрабатывать файлы по отдельности.не понял почему это?
напишите мне чудо, чтобы компилятор не смог обрабатывать файлы по одиночке.
(если ентера нет в конце и даже если слиплись команды из .h и .c файлов) препроцессор сформирует корректный единый файл для компилятора. и компилятор как и прежде будет компилить один файл.
зы: а слипнуться ли команды?
если в .h
написано
"#define abs(x) " (ентера нету)
а в си написано
#include "myfile.h" (x>0)?x:-x
никак не допетрю где же проблемы будут
я так понимаю, что инклюд сглюкнет
#include "a.h"
#include "b.h"
если в a.h нет в конце перевода строки то отдельно обработать b.h низя - хз какая там хрень слепится.
только не надо рассказывать что по стандарту компилятор должен в начале полностью прогнать препроцессор и получить многометровую портянку.
#include "b.h"
если в a.h нет в конце перевода строки то отдельно обработать b.h низя - хз какая там хрень слепится.
только не надо рассказывать что по стандарту компилятор должен в начале полностью прогнать препроцессор и получить многометровую портянку.
я не знаю, чо там по стандарту, но предполагаю, что именно портянку ему и надо сделать, чтобы компилять
я не говорю про прекомпайлд хедерс (под виндой этих ворнингов нет)
я про CC and gcc
я про CC and gcc
> Точнее - иногда выдаётся предупреждение "No newline at the end of file"
Ноги это явления, как и многих остальных закидонов C/C++, растут из далеких времен, когда программы были маленькими, а дискеты - большими.
В те времена - препроцессор и компилятор - представляли собой две совершенно разные программы.
Препроцессор - обрабатывает файлы, а компилятор - их компилит.
т.к. и препроцессор был программой маленькой - то написан он был очень просто - читаем файл, ищем include-ы и макросы, и на их места вставляем содержимое файлов или define-ов.
при такой схеме: если в конце файла не поставить перевод строки, то при последовательных include-ах, последняя строка первого файла сольется в одну строку с первой строкой последующего файла.
Соответственно - если, например, в последней строке первого файла стоял строчный комментарий (// то первую строку последующего файла - тоже окажется закомментированной.
т.к. компиляторов C/C++ сейчас целый зоопарк, и совсем непонятно - каким компилятором будет собираться проект в следующий раз - то приличные компиляторы стараются предупредить указанные выше проблему, и выдают такой warning.
Ноги это явления, как и многих остальных закидонов C/C++, растут из далеких времен, когда программы были маленькими, а дискеты - большими.
В те времена - препроцессор и компилятор - представляли собой две совершенно разные программы.
Препроцессор - обрабатывает файлы, а компилятор - их компилит.
т.к. и препроцессор был программой маленькой - то написан он был очень просто - читаем файл, ищем include-ы и макросы, и на их места вставляем содержимое файлов или define-ов.
при такой схеме: если в конце файла не поставить перевод строки, то при последовательных include-ах, последняя строка первого файла сольется в одну строку с первой строкой последующего файла.
Соответственно - если, например, в последней строке первого файла стоял строчный комментарий (// то первую строку последующего файла - тоже окажется закомментированной.
т.к. компиляторов C/C++ сейчас целый зоопарк, и совсем непонятно - каким компилятором будет собираться проект в следующий раз - то приличные компиляторы стараются предупредить указанные выше проблему, и выдают такой warning.
во...
единственный правдоподобный ответ
спасибо.
вопросов больше не имею)
единственный правдоподобный ответ
спасибо.
вопросов больше не имею)
Оставить комментарий
stm7868162
А с чем связано требование многих компиляторов на наличие символа конца строки в конце файла?Точнее - иногда выдаётся предупреждение "No newline at the end of file"