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