私は次のコードを持っています:
typedef enum
{
FOO,
BAR,
BAZ
} foo_t;
static void afunc(bool is_it_on)
{
/* do the job */
}
int main(void)
{
afunc(BAZ);
return 0;
}
-Wall -Wextra
このコードをコンパイルしても、コンパイラにオプションが指定されていても、警告メッセージは生成されません。-Wconversion
オプションを試してみましたが、g ++と同じサイズのように見えたためbool
、効果がありませんでした。(私が知る限り、型enum
のサイズは仕様で定義されていません)enum
gcc のマニュアルをくまなく調べましたが、何も見つかりませんでした。
質問:
- このような場合にコンパイラに警告を生成させる方法はありますか?
- それとも、この暗黙のキャストは c++ 仕様で合法なのでしょうか?
使用しているコンパイラ: gcc 4.1.2
編集済み
結論:
これに対する唯一の実行可能な解決策は、0 または 1 を表す新しい型を定義し、代わりにそれを使用するようですbool
。
コードは次のようになり、g++ は型変換について不平を言います:
typedef enum
{
FOO1,
FOO2
} foo_t;
typedef enum
{
MY_FALSE,
MY_TRUE
} my_bool_t;
void foo(my_bool_t a)
{
}
int main(void)
{
/*
* gcc generates an error.
* error: cannot convert ‘foo_t’ to ‘my_bool_t’
* for argument ‘1’ to ‘void foo(my_bool_t)’
*/
foo(FOO1);
return 0;
}