Любой компилятор, который принимает «char» как «unsigned»?

Есть ли какой-либо компилятор C, который принимает тип char по умолчанию как беззнаковый, если он явно не указан пользователем в настройках файла или проекта?

/Кану_


person Renjith G    schedule 16.09.2010    source источник


Ответы (3)


GCC делает. Но только при компиляции для платформ, где неподписанный символ является соглашением, включая ARM linux[*]. Когда GCC компилирует для x86, по умолчанию char должен быть подписан.

[*] По крайней мере, так было в прошлом. Насколько я знаю, с тех пор Linux переключился на другой ABI по умолчанию на ARM.

Обновление 2013 г. Компиляторы ARM (gcc, clang) для Android NDK по умолчанию имеют значение unsigned char. Компиляторы x86 и MIPS по умолчанию имеют значение signed char.

person Steve Jessop    schedule 16.09.2010

Стандарт требует, чтобы целочисленное значение всех символов, требуемых стандартом (AZ, az, 0-9, основные знаки препинания и т. д.), было положительным, поэтому любая система, использующая кодировку, в которой значения этих символов находятся за пределами диапазона signed char < strong>должен иметь простое char без знака. Я считаю, что это означает, что все системы EBCDIC должны иметь простое char без знака, но я могу ошибаться.

person R.. GitHub STOP HELPING ICE    schedule 16.09.2010
comment
Если CHAR_BIT > 8, диапазон значений для char больше -128..127 или 0..255. Таким образом, в системе EBCDIC с CHAR_BIT == 9 может быть подписано простое char. - person pmg; 16.09.2010

Обычно есть возможность установить его по умолчанию, но, насколько мне известно, ни один компилятор этого не делает.

person jv42    schedule 16.09.2010
comment
Там есть. В MSVC вы используете /J (тип char по умолчанию — без знака). В GCC вы используете -funsigned-char - person phuclv; 20.02.2016