为何GCC的-Woverflow选项无法捕获int8_t i=128的溢出?
GCC中int8_t赋值128时-Woverflow未触发警告的问题
int8_t的取值范围是-128到127,但编译以下代码时:
#include <stdint.h> int main(){ int8_t i = 128; (void)i; }
使用命令:
gcc t.c -Woverflow
却无法捕获128的溢出。值得注意的是,GCC仅在赋值超过255时才会触发溢出警告,比如编译这段代码:
#include <stdint.h> int main(){ int8_t i = 256; (void)i; }
就能检测到溢出。
有意思的是,当同时使用-Woverflow -Wpedantic选项时,128的溢出会被捕获,产生如下警告:
prog.c:3:15: warning: overflow in conversion from 'int' to 'int8_t' {aka 'signed char'} changes value from '128' to '-128' [-Woverflow] 3 | int8_t ii=128;
经确认,这大概率是GCC的bug,已提交编号为108798的bug报告。测试环境为GCC 12.1.0(发布于2022-05-06)。
内容的提问来源于stack exchange,提问作者hanshenrik
相关产品推荐
相关产品推荐

