最近遇到一个判断语句时,会莫名的报出如下警告
判断语句(示例):
if(EXTI_GetITStatus(INPUT7_EXTI_LINE) != RESET)
警示标注于:!=
警告如下:
warning: Comparison of constant 85 with expression of typeITStatus' (aka'FlagStatus') is always true.
虽然这个警示在我们编译时,不会出现在我们编译提示中,大多数情况不会影响程序的正常运行。
本着出现及可能有未知情况的心态,对其进行解析寻找问题根源。
通过警告字面意思,可以知道该判断语句为无效状态。它一直为真,所有可以排除
EXTI_GetITStatus(INPUT7_EXTI_LINE)
该函数存在问题。但是RESET也是库函数中STMF10x.h中的固定枚举成员,联系编译后,编译信息不会出现报警提示。所以我推测在编译过程中,对该值进行了优化或者强制对应。
1、如果是优化那么意味着该条件要么一直为真或者为假。通过验证语句正常。
2、如果是强制对应,那么就说明可能存在着相同变量。
通过find对RESET查询(或者GO TO Definition of),果然存在一个相同的变量名且该名被赋值。
通过修改变量名后,该警告消除。
结论:自我命名时,多考虑是否与系统变量名冲突。