首页 > 解决方案 > 从 C++ 转换为 C 时的枚举问题

问题描述

我正在将我的 C++ 代码更改为 C 代码,因为我发现自己倾向于更纯粹的函数式程序,并且没有真正使用任何 C++ 功能。快速编译也是一个优点。

我在标题中遇到了这个特殊的问题:

void gameLoop();
void doStuff();

enum GameState
{
    MENU, PLAY, EXIT
};

GameState gameState;

我想在我的源代码中用于这样的功能:

void gameLoop() 
{
    while (gameState != GameState::EXIT)
    {
        doStuff();

    }
}

标签: c++cenums

解决方案


正如评论中所指出的,您不能::在 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;

推荐阅读