【发布时间】:2019-11-06 09:48:34
【问题描述】:
我认为 GCC 错误地产生了 [-Wshift-negative-value] 警告。
我有一个函数应该产生一个由其单个输入参数提供的特定长度的后缀掩码:
#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。但是我已经使用最新的 GCC 9.x 版本在godbolt 上进行了尝试,它们都产生了相同的警告。但是,Clang 版本不会产生此错误。
【问题讨论】:
-
请注意:如果定义如下一行,为什么还要使用原型?
-
哦,这只是我的编译器抱怨缺少声明的残余。我会删除它。
标签: c gcc gcc-warning