VS Code中char与200等常量比较报恒为真警告的原因问询
你提供的代码如下:
#include <stdio.h> int main() { char c='w'; if((c>110 && c>120)&&(c<120 && c<200)) printf("true"); else printf("false"); return 0; }
现象原因解释
VS Code触发
C语言标准未明确规定c < 200恒为真警告的原因char类型的默认符号属性,在x86架构下绝大多数编译器(VS Code常用的GCC、Clang均在此列)默认将char实现为有符号字符型(signed char),取值范围为-128~127。200远大于signed char的最大值127,因此无论char变量存储什么值,c < 200的判断结果永远为真,编译器静态分析识别到这个无意义的比较后就会触发警告。
而110、120均落在signed char的正常取值范围内,和char变量比较的结果随变量值变化,因此不会触发恒真/恒假类警告。在线编译器无警告的原因
编译器警告属于可选的静态检查功能,是否输出警告完全取决于编译器类型、警告级别配置。绝大多数在线C编译器默认关闭了大多数非致命的静态检查警告,因此不会给出该提示。代码输出false与警告不冲突的原因
你的if判断逻辑中,第一个子条件(c>110 && c>120)已经为假:字符'w'对应的ASCII值为119,119>120不成立,因此整个与逻辑的判断结果直接为假,不会实际执行到c < 200的判断分支,因此代码输出false,和收到的警告无冲突。
内容的提问来源于stack exchange,提问作者user13387446
相关产品推荐
相关产品推荐

