2016-11-23 14 views
0

Написано ли в стандарте, что EOF должно быть отрицательным? Наоборот, WEOF не обязательно должен быть отрицательным. Зачем? Ситуация для wchar_t не должен быть каким-либо образом отличается от обычного char (кроме случаев, когда автоматическое продвижение от char к int играет роль), так как определение wchar_t, как char прекрасно подходит со стандартом. Поэтому должны применяться аналогичные правила.Должен ли стандарт требовать отрицательного значения EOF?

Некоторые цитаты из ссылки GLibC:

если wchar_t определяется как char тип wint_t должен быть определен как int в связи с продвижением параметра.

было бы правомерно определить wchar_t в char

ответ

1

Да, это гарантированно будет отрицательным. См C11

7,21 Входной/выходной

7.21.1 Введение

1 Заголовок определяет несколько макросов, и объявляет три типа и многие функции для выполнения ввода и вывода.

3 ...

EOF

, которая расширяется до константного выражения целого, с типом int и отрицательным значением

+0

Что такое ** ** обоснование для этого? Почему WEOF не должен быть отрицательным? –

+1

@IgorLiferenko: Нет никакого обоснования; это исторически то, что ожидалось, и стандарт сказал это, в 1989 году и с тех пор. Это делает знак «EOF» отличным от действительных значений символов, возвращаемых 'getchar()' и друзьями, конечно. –

+0

@JonathanLeffler Просто прекратите говорить об истории. Вы верите, что эти люди были глупыми? Я пытаюсь понять истинную причину. –

 Смежные вопросы

  • Нет связанных вопросов^_^