В книге "Полная Ссылка C" это упоминается это char
по умолчанию не подписано.
Но я пытаюсь проверить это с GCC, а также Visual Studio. Это берет его, как подписано по умолчанию.
Какой корректен?
Книга неверна. Стандарт не указывает, подписан ли простые CHAR
или без знака.
На самом деле, стандарт определяет три различных типа: ,
, , подписанный CHAR
, а unsigned Char
. Если вы #include
, а затем посмотрите на char_min
, вы можете узнать, если только CHAR
подписан
или unsigned
(если CHAR_MIN
составляет менее 0 или равно 0), но даже тогда три типа различны , насколько это касается стандарта.
Обратите внимание, что Char
особенный таким образом. Если вы объявляете переменную как int
, это 100% эквивалентно объявлением его как подписано INT
. Это всегда верно для всех компиляторов и архитектур.
Проект C99 N1256 6.2.5 / 15 «Типы», чтобы сказать о подписанном уровне типа Char
:
Реализация определяет Чем в том же ассортименте, представлении и поведение, как либо подписанный символ или без значок.
И в сноске:
CHAR_MIN
, определенный в, будет иметь одно из значений
0
илиSchar_min
, и это можно использовать для различения двух вариантов. Независимо от выбора, сделанного,
Char
- это отдельный тип из двух других и не совместим с либо.
Так как Алок указывает , стандарт оставляет это до реализации.
Для gcc значение по умолчанию подписано, но вы можете изменить его с помощью -funsigned-char
. Примечание: для gcc в Android NDK, по умолчанию без подписи. Вы также можете явно запрашивать подписанные символы с помощью -funsigned-char
.
В MSVC по умолчанию подписан символ, но вы можете изменить его с помощью /J
.