列挙型と、すべて列挙型を使用するマクロ定義とメソッドがあります。コンパイルできません。次のコードについて考えてみます。
typedef enum fruits_t
{
APPLE,
ORANGE,
BANANA
} fruits_t;
#define KEY_TO_VALUE(x) ((x == APPLE) ? 0 : \
(x == ORANGE) ? 1 : \
(x == BANANA) ? 2 : \
"Undefined")
static void foo(char fruit) {
if (fruit == KEY_TO_VALUE(APPLE)) {
/* do something */
}
}
これはコンパイルされますが、次の警告が表示されます。
warning: pointer/integer type mismatch in conditional expression
warning: comparison between pointer and integer
なんで?私はCに非常に慣れていないので、経験豊富なC開発者にとって明白に思えるかもしれないことを説明していただければ幸いです。私のプログラミング知識のほとんどはJavaベースです。