4

私は次のようなコードを持っています:

void generateInt(int *result)
{
  /* chosen by fair dice roll*/
  *result = 1;
}

typedef enum colour
{
  RED,
  GREEN,
  BLUE
} COLOUR;

int main(int, char**)
{
  COLOUR col, col2;
  int i;

  generateInt(&i);
  col = (COLOUR)i;

  generateInt((int*)(&col2));

  return 0;
}

への2回目の呼び出しの後、とgenerateIntは両方とも等しいことが保証されますか?最初のバージョン設定が合法であることは知っていますが、pointer-to-enumをpointer-to-intにキャストし、ポインターを介して割り当てるとどうなるかが定義されているかどうかはわかりません。colcol2GREENcol

4

2 に答える 2

5

それは確かにOKではありません。列挙型の基になる型がであると信じる理由はありませんint。したがって、ポインタをキャストすることは非常に不適切である可能性があります。

機能を変えてみませんか?

void generateInt(COLOUR * c)
{
    *c = GREEN;
}
于 2012-11-29T15:53:17.740 に答える
1

これは適切な方法である必要があります:

void generateInt(COLOUR * c)
{
    //Roll number given here
    switch(roll_result)
    {
      case 0 :
        *c = RED;
      break;
      case 1 :
         *c = GREEN;
      break;          
      case 2 :
         *c = BLUE;
      break;
      //...
      default :
      break;
   }
}
于 2012-11-29T15:58:39.813 に答える