Фон
В последний раз я спросил о том, вызывают ли скобки, вызывающие неявные литые ( здесь ), @PMG был достаточно хорош, чтобы указать, что «ничего в C Сделано ниже int "Но там обсуждение было о битомных операторах, а скобки оказались просто отвлечением.
Введение
ниже, скобки являются главной достопримечательностью. Или, чтобы быть более скучным, но точным, единственным операторам, которые я вижу, являются скользями и операторами назначения.
При этой ссылке о операторе C в скобках я ничего не вижу о скобках, изменяющих тип (снаружи синтаксиса типового попечения, который не в этом случае).
Тем временем вот ссылка, которая напоминает, что там - это преобразование автоматического типа на присвоение , но я не думаю, что это объяснит поведение инструмента статического анализа, которое я опишу здесь.
Как в моем предыдущем вопросе «ОК» означает, что инструмент статического анализа не предупреждал , предупреждаю о неявном преобразовании , а «не в порядке» означает, что он сделал.
int main(void)
{
unsigned int ui;
int i;
ui = (256U); // NOT OK (*) (1)
i = (256U); // NOT OK (*) (2)
i = 256; // OK
i = 256U; // NOT OK
ui = 256U; // OK (3)
ui = 256; // NOT OK
return(0);
}
Я могу понять их все, кроме первых двух - что делают скобки? Если они ничего не делают на пути неявной типости, то я бы ожидал (1) быть в порядке и (2) быть не в порядке. Если они делают автоматический тип продвижения типов меньше, чем int до int, то я ожидал (1), чтобы быть не в порядке и (2), чтобы быть в порядке. Но этот инструмент говорит, что оба не в порядке.
Это ошибка инструмента статического анализа, или является инструментом правильным, и есть что-то еще, что мне нужно узнать о неявных преобразованиях типа в C?
(кстати, я надеюсь, что значение 256 достаточно мало, не вызывает переполнения на Моя машина ...)