【C言語】
恒真式(常に真)/恒偽式(常に偽)
(tautological)

warning: overlapping comparisons always evaluate to true

警告: 重複する比較は常に真と評価される
[-Wtautological-overlap-compare]


■常に真となる恒真式

#include <stdbool.h>
int f2(bool x)
{
    if(x == 1 || x != 1){//恒真式
        return  1;
    }
    return  0;
}

■常に偽となる恒偽式

int f3(int x)
{
    if(x == 1 && x != 1){//恒偽式
        return  1;
    }
    return  0;
}

■数直線上有り得ない

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 ){


■数直線上の全域

int    f5(int x)
{   
    if(-100 < x || x < 100){//NG:数直線上の全域
        return  T;
    }
    return  F;
}

数直線の上で
-100より大きいか
+100より小さい領域は全領域です。
-100⇒x x⇦100


■何故か警告が出ない

#include    <stdbool.h>
bool f6(bool x)
{
    if(x == true && x == false) {//何故か警告が出ない
        return  true;
    }
    return  false;
}

残念ながらこの警告はgccでは検出されず
clangのみが検出します。
又なぜかstdbool.hで定義している  
true/false マクロを使用すると警告が出なくなってしまいます。