【C言語】
enumは
符号付き(signed)か?
符号無し(unsigned)か?

warning: result of comparison of unsigned enum expression < 0 is always false

警告:unsigned enum 式 < 0 の比較結果は常に偽である。
[-Wtautological-unsigned-enum-zero-compare]

■1.enumが符号無しになる例

#include    <stdio.h>
typedef enum {A=0,B,C}  typeA ;//負値無しのenum型
static void    fA(void)
{
    typeA  x = -1;//符号無しになる
    if(x < 0){
        printf("THEN\n");
    }else{
        printf("ELSE\n");//こちらが表示されます
    }
}

enum型はメンバ内の負値の有無に応じて
符号付きになったり、
符号無しになったりします。

enumのメンバに負値がない場合
enumの型はgcc,clangでは
type A xは
符号無しになりました。
このためxは負値にならないので6行目のif文は常に成立しません。

■2.enumが符号付きになる例

typedef enum {D=-1,E,F} typeB ;//負値ありのenum型
static void    fB(void)
{
    typeB  x = -1;//符号付きになる
    if(x < 0){
        printf("THEN\n");//こちらが表示されます
    }else{
        printf("ELSE\n");
    }
}

enumのメンバに負値がある場合
enumの型はgcc,clangでは
type B xは
符号付きになりました。
このためxは負値になるので5行目のif文は成立します。

■3.注意

この警告は現在 gcc では出ません。
clang の-Wallにも含まれず
-Wtautological-unsigned-enum-zero-compare 
オプションで出ます。