c++ - 从 C++ 转换为 C 时的枚举问题
问题描述
我正在将我的 C++ 代码更改为 C 代码,因为我发现自己倾向于更纯粹的函数式程序,并且没有真正使用任何 C++ 功能。快速编译也是一个优点。
我在标题中遇到了这个特殊的问题:
void gameLoop();
void doStuff();
enum GameState
{
MENU, PLAY, EXIT
};
GameState gameState;
我想在我的源代码中用于这样的功能:
void gameLoop()
{
while (gameState != GameState::EXIT)
{
doStuff();
}
}
解决方案
正如评论中所指出的,您不能::
在 C 中使用范围解析运算符 ( ) (没有这样的运算符)。此外,如果您想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();
}
}
作为一项改进,您可能希望在枚举值中添加合适的“前缀”,以避免可能与其他地方声明的类似 ID 发生冲突:
typedef enum {
gsMENU, gsPLAY, gsEXIT
} GameState;
推荐阅读
- python - 如何在 tkinter 文本小部件中为文本的当前长度制作多个标签
- python - 使用 pyinstaller 在 EXE 中找不到“os.path.isdir”
- reactjs - 如何在不同的组件中渲染分离的路线
- javascript - 自动从用户的浏览器获取用户的位置,而不是在 django 视图中硬编码来过滤最近的商店
- javascript - 何时使用动态导入和静态导入
- python - 这个点子问题有什么解决方案吗?
- direct3d12 - 为什么 D3D12 样本使用 WM_PAINT?
- php - Laravel Excel,验证导入在同一行中接受 2 个唯一数字
- javascript - iOS Safari Won't Refresh Javascript Content
- discord.js - Discord JS获取字段的文本和值