Вот код:
unsigned char A[] = { 'a', 'b', 12, 256, 'c', 28 };
он хорошо компилируется в VS с использованием x64-компилятора. Но 16-битный компилятор выдает какую-то ошибку, и, к сожалению, я не знаю, что это за ошибка. Вопрос в том, почему 16-битная ошибка в этом случае. Вы можете это объяснить?
char
всегда является байтом, поэтому не имеет значения, является ли ваша платформа 16-битными или 64-битными словами (хотя, если вы используете систему с CHAR_BIT != 8
, мы поговорим!). Что, вероятно, более важно, так это то, что ваш 16-битный компилятор (да, я предполагаю, что Turbo C ++) относится к 1980-м годам, за десять лет до первого стандарт издание C ++, так что в целом он ведет себя немного иначе.
В этом случае он менее терпим к значению 256
, который на самом деле больше, чем может быть сохранен в char
(подписано или иным образом). Я бы сказал, что это «неправильно», но трудно не соответствовать стандарту, которого не было в то время. Turbo C ++ в значительной степени свободен, чтобы делать свое дело, в этом смысле — это не на самом деле C ++, так, как мы понимаем термин «C ++» сегодня.
Я ожидал бы, что ваш компилятор Visual Studio выдаст предупреждение компилятора … и затем инициализирует unsigned char
с помощью оберточного, как то, как работают беззнаковые значения.
Других решений пока нет …