clang tutological-constant-out-of-range-compare warning
如果我使用clang编译以下简单程序(test.c)
#include <stdio.h> typedef enum { a,b } sample_enum_t; int main() { sample_enum_t sample_enum = -1; if (sample_enum == -1) { printf("Equalsn"); } } 编译给了我一个警告: $clang -o test test.c test.c:11:21: warning: comparison of constant -1 with expression of type 'sample_enum_t' is always false [-Wtautological-constant-out-of-range-compare] if (sample_enum == -1) { ~~~~~~~~~~~ ^ ~~ 1 warning generated. 如果我执行它以“Equals”打印的程序,那么比较总是假的,这显然是不正确的: $./test Equals 这是一个铿锵的错误还是我错过了什么?我明白将-1分配给sample_enum变量并不是一个好主意,但它是一个有效的行,并且clang因为该行而没有给我一个警告. 我正在使用clang 3.5.2 解决方法
暂时忽略Clang是对还是错,让我们看一下标准所说的内容.
6.7.2.2 Enumeration specifiers:
您依赖于实现定义的行为;您的实现选择的类型是否表示-1是否未由标准定义. 所以,这不是一个真正的问题,Clang的诊断有点用处,因为如果你无意中使用了一些你定义的枚举常量范围之外的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |