warning: overlapping comparisons always evaluate to true
警告: 重複する比較は常に真と評価される
[-Wtautological-overlap-compare]
■1.常に真となる恒真式
#include <stdbool.h>
int f2(bool x)
{
if(x == 1 || x != 1){//恒真式
return 1;
}
return 0;
}
■2.常に偽となる恒偽式
int f3(int x)
{
if(x == 1 && x != 1){//恒偽式
return 1;
}
return 0;
}
■3.数直線上有り得ない
int f4(int x)
{
if(x < -100 && 100 < x){//NG:数直線上有り得ない
return T;
}
return F;
}
数直線の上で
-100より小さくかつ
+100より大きい領域はありません。
x ⇦ ー100 100⇒x
NG:if(x < -100 && 100 < x){
OK:if(x < -100 || 100 < x){
OK:if(-100<=x && x<=100 ){
■4.数直線上の全域
int f5(int x)
{
if(-100 < x || x < 100){//NG:数直線上の全域
return T;
}
return F;
}
数直線の上で
-100より大きいか
+100より小さい領域は全領域です。
-100⇒x x⇦100
■5.何故か警告が出ない
#include <stdbool.h>
bool f6(bool x)
{
if(x == true && x == false) {//何故か警告が出ない
return true;
}
return false;
}
残念ながらこの警告はgccでは検出されず
clangのみが検出します。
又なぜかstdbool.hで定義している
true/false マクロを使用すると警告が出なくなってしまいます。