Я думаю, что GCC неправильно выдает предупреждение [-Wshift-отрицательное значение].
У меня есть функция, которая должна создавать маску суффикса определенной длины, предоставляемую одним входным аргументом:
#include <stdint.h>
uint16_t get_suffix_mask_sht(uint8_t shift) {
return (~(~((uint16_t) 0) << shift));
}
Я пытался скомпилировать эту функцию со следующими параметрами компилятора в разных версиях gcc
-Werror -Wextra
Это предупреждение также появляется, если я изменяю вывод с uint16_t
на uint8_t
. Большие типы вывода, например uint32_t
, не выдают это предупреждение.
Я использую старую версию GCC: 7.4. Но я попробовал это на godbolt , используя последние версии GCC 9.x, и все они выдают одно и то же предупреждение. Однако версии Clang не выдают эту ошибку.