Могут ли в скобках в C привести к неявному линию?

Фон

В последний раз я спросил о том, вызывают ли скобки, вызывающие неявные литые ( здесь ), @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 достаточно мало, не вызывает переполнения на Моя машина ...)

7
задан Community 23 May 2017 в 12:09
поделиться