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'可以在此函数中未初始化使用。我该如何解决这些问题?
答案 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
不知道“播放”是指什么,因为定义是在它之后。