【发布时间】:2017-02-20 12:21:10
【问题描述】:
如果我使用 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("Equals\n");
}
}
编译器给了我一个警告:
$ 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.
如果我执行它在“等于”处打印的程序,比较总是错误的显然不是真的:
$ ./test
Equals
这是一个clang错误还是我错过了什么?我明白将 -1 分配给 sample_enum 变量不是一个好主意,但它是一个有效的行,并且由于该行,clang 不会给我警告。
我正在使用 clang 3.5.2
【问题讨论】:
-
This Clang issue seems relevant。它没有关闭,所以我不确定它是否已解决。我的理解是他们认为这是一个有用的警告,但应该重新制定它以防止人们根据警告删除代码。
-
哎呀,那个错误报告已经 3.5 年了。
-
将分享一个引发此 clang 警告的真实示例:github.com/golems/ach/blob/…
标签: c clang compiler-warnings