Если я составляю следующую простую программу (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
ли лязг ошибка, или я чего-то не хватает? Я понимаю, что назначение -1 переменной sample_enum не очень хорошая идея, но это допустимая строка, и clang не дает мне предупреждения из-за этой строки.
Я использую лязг 3.5.2
[Эта проблема с Кланом кажется актуальной] (https://bugs.llvm.org//show_bug.cgi?id=16154). Он не закрыт, поэтому я не уверен, что он был рассмотрен. Я понимаю, что они считают это полезным предупреждением, но его следует переформулировать, чтобы люди не могли удалять код, основанный на предупреждении. – unwind
Ouch, что bugreport 3,5 лет. – asalamon74