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
オプションで出ます。