从 C++ 转换为 C 时的枚举问题
Enum issue when converting from C++ to C
我正在将我的 C++ 代码更改为 C 代码,因为我发现自己倾向于更纯函数式的程序,并没有真正使用任何 C++ 功能。快速编译也是一个加分项。
我在 header:
中遇到这个问题
void gameLoop();
void doStuff();
enum GameState
{
MENU, PLAY, EXIT
};
GameState gameState;
我想在源代码中使用这样的函数:
void gameLoop()
{
while (gameState != GameState::EXIT)
{
doStuff();
}
}
正如评论中所指出的,您不能在 C (there is no such operator) 中使用作用域解析运算符 (::
)。此外,如果您想将 GameState
用作变量类型(如声明中的 GameState gameState;
),则需要 明确地 将其定义为一种类型,使用 typedef
关键字。
这是您发布的代码的 C 版本(另请注意显式 void
参数列表声明):
void gameLoop(void);
void doStuff(void);
typedef enum {
MENU, PLAY, EXIT
} GameState;
GameState gameState;
void gameLoop(void)
{
while (gameState != EXIT) {
doStuff();
}
}
作为一项改进,您可能希望向枚举值添加合适的 'prefixes',以避免与其他地方声明的类似 ID 可能发生冲突:
typedef enum {
gsMENU, gsPLAY, gsEXIT
} GameState;
我正在将我的 C++ 代码更改为 C 代码,因为我发现自己倾向于更纯函数式的程序,并没有真正使用任何 C++ 功能。快速编译也是一个加分项。
我在 header:
中遇到这个问题void gameLoop();
void doStuff();
enum GameState
{
MENU, PLAY, EXIT
};
GameState gameState;
我想在源代码中使用这样的函数:
void gameLoop()
{
while (gameState != GameState::EXIT)
{
doStuff();
}
}
正如评论中所指出的,您不能在 C (there is no such operator) 中使用作用域解析运算符 (::
)。此外,如果您想将 GameState
用作变量类型(如声明中的 GameState gameState;
),则需要 明确地 将其定义为一种类型,使用 typedef
关键字。
这是您发布的代码的 C 版本(另请注意显式 void
参数列表声明):
void gameLoop(void);
void doStuff(void);
typedef enum {
MENU, PLAY, EXIT
} GameState;
GameState gameState;
void gameLoop(void)
{
while (gameState != EXIT) {
doStuff();
}
}
作为一项改进,您可能希望向枚举值添加合适的 'prefixes',以避免与其他地方声明的类似 ID 可能发生冲突:
typedef enum {
gsMENU, gsPLAY, gsEXIT
} GameState;