2013-01-23 Wed
■ enum の不思議な動き [langc]
開発中のソースコードを見ていて、enum の設定ミスを発見。
しかし、make も動作も問題ない。
で、ちょっと enum お試し。
#include <stdio.h>
enum Color { white, black, red };
enum Name { koba };
// sub() 引数は enum Name
int sub(enum Name nam)
{
switch(nam)
{
case white:
printf("White\n");
break;
case black:
printf("Black\n");
break;
case red:
printf("Red\n");
break;
default:
printf("Other\n");
}
return 0;
}
int main()
{
enum Color col;
col = red;
// sub() に enum Color の red を設定
sub(col);
return 0;
}
- まず enum Color と enum Name の二つを定義
- で、sub() 関数の引数に enum Name nam を定義したが、
処理では間違えて、nam を enum Color の要素のように分岐
- 更に、main() でsub() を呼ぶときに、間違えて enum Color の red を設定
- ここに、enum Name は要素数 1なのに、red は enum Color の3番目
にも関わらず、gcc -W -Wall でも何のエラー、ワーニングもなくコンパイルリンク OK
かつ、実行すると "Red" が表示される。
enum Name って何なの?? という結果でした。
最終更新時間: 2025-06-06 08:52
