从 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;