Значение '\08'
считается постоянной нескольких символов, состоящий из \0
(который оценивает число 0) и символ ASCII 8
(который оценивает до десятичного числа 56). Как это интерпретируется, определяется реализация. В стандарте C99 говорится:
Целочисленная символьная константа имеет тип int. Значение целочисленной символьной константы , содержащей один символ, который сопоставляется с однобайтовым символом выполнения , представляет собой числовое значение представления отображаемого символа, интерпретируемого как целое число, . значение константы целого числа символов, содержащей более одного характера (например, «аb»), или содержащей символ или избежать последовательностей , что не отображают до выполнения символа одного байта, является реализацией определенной.Если целочисленная символьная константа содержит одиночный символ или escape-последовательность , то его значение равно , когда объект с типом char, значение которого является значением одного символа или escape-последовательности, преобразуется в тип int.
Так что, если вы бы назначить '\08'
что-то большее, чем char
, как int
или long
, даже было бы действительным. Но поскольку вы назначаете его char
, вы «отрубаете» какую-то часть. Какая часть, вероятно, также зависит от реализации/машины. В вашем случае это дает вам значение 8
(символ ASCII, который оценивает число 56).
Как GCC, так и Clang предупреждают об этой проблеме с помощью «предупреждение: многосимвольная символьная константа».
Пожалуйста, поместите код в вопрос (обратите внимание на кнопку ** '{}' ** для ее форматирования) и добавьте осмысленное название. (кнопка редактирования чуть ниже вопроса). – BoBTFish
да простите! Я только что создал эту учетную запись –
Поскольку неопределенное поведение не определено. – molbdnilo