3
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'可能在这个函数中未初始化使用。我该如何解决这些问题?

4

2 回答 2

4

当编译器遇到播放调用时,它还不知道该函数,因为它在下面声明。因此发出警告。只需将声明移到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的值未初始化。

只需为hand设置一个值:

Suits hand = SPADES;
于 2013-03-17T01:30:53.600 回答
0

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

尝试定义hand为卡片类型:

hand = SPADES;

然后调用 play(hand)。

把它想象成声明一个int.

int x;

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

someFunc (x);

如果不初始化x,您将获得未定义的行为。

编辑:另外,把你的play函数的定义放在上面main(在枚举定义之后)。要么,要么你需要在上面声明你的函数main

void play(Suits hand);

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

于 2013-03-17T01:27:13.400 回答