前の月 / 次の月 / 最新

XINUJP - ChangeWebLog / 2013-01

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12

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 って何なの?? という結果でした。

最終更新時間: 2019-08-15 09:35