CLion Clang-Tidy использует целочисленный операнд со знаком с двоичным побитовым оператором - PullRequest
0 голосов
/ 07 мая 2018

Я получаю предупреждение в моем файле c, когда пытаюсь использовать >> операнд. Кто-нибудь, кто может сказать мне, что это значит?

[код]:

 new_elem = (Elem *) realloc(pl->elem, (pl->size + (pl->size >> 1)) * sizeof(Elem));

[предупреждение]:

Clang-Tidy use of a signed integer operand with a binary bitwise operator.

1 Ответ

0 голосов
/ 07 мая 2018

В C, если переменная представляет собой целое число со знаком, то двоичный побитовый оператор >> зависит от реализации (на нее не следует полагаться). См. этот пост , как предложил Гаурав в комментариях.
В вашем примере pl->size - это (угадывание!) Целое число со знаком, и вы делаете (pl->size >> 1), поэтому вы применяете двоичный побитовый оператор >> к переменной pl->size. Clang пытается предупредить вас о поведении, определяемом реализацией, чтобы вы могли исправить свой код.
Используйте деление и умножение на целые числа со знаком, что хорошо определено. В любом случае компилятор должен оптимизировать код.

new_elem = realloc(pl->elem, (pl->size + (pl->size/2)) * sizeof(Elem));
...