Нет, это не совсем так.C99 Раздел 5.1.2.3 Program execution
, пункт 10 охватывает точно случай, о котором вы спрашиваете:
ПРИМЕР 2
При выполнении фрагмента
char c1, c2;
c1 = c1 + c2;
«целочисленные продвижения» требуют, чтобы абстрактная машина повышала значение каждой переменной до размера int, а затем добавляла два целых числа и усекала сумму.
При условии, что можно добавить два символабез переполнения или с бесшумной упаковкой переполнения для получения правильного результата, фактическое выполнение должно давать только один и тот же результат, возможно, пропуская повышение.
Итак, если известно, что операция дает тот же результатнет необходимости использовать более широкие значения.
Но если вы хотите обосновать конкретное решение, принятое в стандарте, вам нужно посмотреть, ..... подождать, ....да, Обоснование документа : -)
В разделе 6.3.1.8 этого обоснования (разделы соответствуют тем в стандарте), оно гласит:
Явный лиcense был добавлен для выполнения вычислений в «более широком» типе, чем это абсолютно необходимо, поскольку иногда это может привести к созданию меньшего и более быстрого кода, не говоря уже о правильном ответе.
Вычисления также можно выполнять в «более узком»”, Как правило, если получен тот же конечный результат.