C99 и один в аппендиксе J есть список UB. Меня конкретно интересует вот этот:
A nonempty source file does not end in a new-line character which is not immediately
preceded by a backslash character or ends in a partial preprocessing token or
comment (5.1.1.2).
Как известно все UB служит для того чтобы облегчить имплементацию языка/компилятора, повысить качество оптимизаций и прочие подобные причины.
Два вопроса:
(1) почему вышеперечисленное является UB. Что и самое главное как именно упрощается в компиляторе.
(2) Я не совсем понимаю следующую часть:
[...]or ends in a partial preprocessing token or
comment
Можно привести пример кода к которому это относится и опять же, почему это выведено в отдельный случай?
к сожалению, не все UB служат для благой цели. например, это UB: #define X(x) x X(#define) A 123 можно было просто выдать ошибку, но почему-то UB. хоть современные компиляторы и эммитят ошибку компиляции. насчёт partial preprocessing token я тоже не понял
Потому что текстовые файлы, не имеющие переноса строки в конце, могут некорректно обрабатываться системными утилитами
Да, но тут больше интересует вопрос о том почему это UB а не, например, ID
Обсуждают сегодня