如何初始化枚举?

时间:2013-03-17 01:16:07

标签: c function enums

typedef enum
{
    HEARTS = 0, 
    SPADES, 
    DIAMONDS, 
    CLUBS
}Suits; //here HEARTS = 0, SPADES = 1, DIAMONDS = 2, and CLUBS = 3  

int main()
{
    Suits hand;
    play(hand);
    return 0;
}

void play(Suits hand)
{
    printf("Testing.\n");
}

当我编译类似于此的东西时,编译器给出了错误:隐式声明函数'play'和警告:'menu'可以在此函数中未初始化使用。我该如何解决这些问题?

2 个答案:

答案 0 :(得分:3)

当编译器遇到对 play 的调用时,它还不知道该函数,因为它在下面声明。因此警告。只需在 main

之前移动声明
typedef enum{HEARTS = 0, SPADES, DIAMONDS, CLUBS}Suits; //here HEARTS = 0, SPADES = 1, DIAMONDS = 2, and CLUBS = 3  

void play(Suits hand)
{
  printf("Testing.\n");
}

int main()
{
  Suits hand;
  play(hand);
  return 0;
}

要删除第二个警告,请声明

Suits hand;

hand 尚未初始化,因此编译器会警告您,您提供给 play 函数的值未初始化。

只需为设置一个值:

Suits hand = SPADES;

答案 1 :(得分:0)

正如您在上面声明的那样,Suits定义了一个只能包含HEARTS,SPADES,DIAMONDS,CLUBS之一的类型。因此,当您将hand声明为Suit类型时,它可以采用您在枚举中定义的值。

尝试将hand定义为卡片类型:

hand = SPADES;

然后打电话(手)。

与宣布int类似地考虑它。

int x;

x是整数类型,必须包含此类型定义的值。如果你调用一个函数

someFunc (x);

没有初始化x,您将获得未定义的行为。

编辑: 另外,将play函数的定义置于main之上(在枚举定义之后)。要么是这样,要么你需要在main上面声明你的函数:

void play(Suits hand);

否则,main不知道“播放”是指什么,因为定义是在它之后。