Символ подписывается или не подписан по умолчанию?

В книге "Полная Ссылка C" это упоминается это char по умолчанию не подписано.

Но я пытаюсь проверить это с GCC, а также Visual Studio. Это берет его, как подписано по умолчанию.

Какой корректен?

143
задан Paulo Mattos 7 November 2018 в 16:55
поделиться

3 ответа

Книга неверна. Стандарт не указывает, подписан ли простые CHAR или без знака.

На самом деле, стандарт определяет три различных типа: , , , подписанный CHAR , а unsigned Char . Если вы #include , а затем посмотрите на char_min , вы можете узнать, если только CHAR подписан или unsigned (если CHAR_MIN составляет менее 0 или равно 0), но даже тогда три типа различны , насколько это касается стандарта.

Обратите внимание, что Char особенный таким образом. Если вы объявляете переменную как int , это 100% эквивалентно объявлением его как подписано INT . Это всегда верно для всех компиляторов и архитектур.

185
ответ дан 23 November 2019 в 22:59
поделиться

Проект C99 N1256 6.2.5 / 15 «Типы», чтобы сказать о подписанном уровне типа Char :

Реализация определяет Чем в том же ассортименте, представлении и поведение, как либо подписанный символ или без значок.

И в сноске:

CHAR_MIN , определенный в , будет иметь одно из значений 0 или Schar_min , и это можно использовать для различения двух вариантов. Независимо от выбора, сделанного , Char - это отдельный тип из двух других и не совместим с либо.

34
ответ дан 23 November 2019 в 22:59
поделиться

Так как Алок указывает , стандарт оставляет это до реализации.

Для gcc значение по умолчанию подписано, но вы можете изменить его с помощью -funsigned-char. Примечание: для gcc в Android NDK, по умолчанию без подписи. Вы также можете явно запрашивать подписанные символы с помощью -funsigned-char.

В MSVC по умолчанию подписан символ, но вы можете изменить его с помощью /J.

64
ответ дан 23 November 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: