gpt4 book ai didi

c++ - 理解这段代码 : C++, #define table and enums

转载 作者:行者123 更新时间:2023-11-30 00:56:14 25 4
gpt4 key购买 nike

我很难理解这段代码。

#define TABLE  \
STATE(STATE_1, true) \
STATE(STATE_2, false) \
STATE(STATE_3, true)


enum State_t
{
#define STATE( state, valid) state,
TABLE
#undef STATE
NUM_STATES
}

我知道 State_t 枚举将具有 STATE_1、STATE_2 和 STATE_3 以及 NUM_STATES=3,但我很难理解其机制。有人可以解释一下吗。

另外,现在我想定义一个重复的状态,例如:

#define TABLE  \
STATE(STATE_1, true) \
STATE(STATE_2, false) \
STATE(STATE_3, true) \
STATE(STATE_2, true)

但是由于重新定义了 STATE_2,这会导致编译器错误。我怎样才能让 State_t 枚举仍然有 State_t={STATE_1, STATE_2 , STATE_3} 并且如果可能的话 NUM_STATES=4,可能使用 #ifndef。我不确定这是否可以完成,但请分享您的想法。

谢谢。

最佳答案

#define 告诉预处理器 (PP) 替换内容。 (删除了定义语句)
所以,开始于:

enum State_t
{
TABLE
NUM_STATES
}

PP 将用它的定义替换 TABLE:

enum State_t
{
STATE(STATE_1, true)
STATE(STATE_2, false)
STATE(STATE_3, true)
NUM_STATES
}

现在 PP 将用 STATE 定义替换每个 STATE,导致:

enum State_t
{
STATE_1,
STATE_2,
STATE_3,
NUM_STATES
}

注意:STATE 定义不使用 valid 参数。

关于您的第二个问题,现在我想您可以看到如果您向 TABLE 添加另一个 STATE(STATE_2, true) 会如何结束。但您始终可以添加 STATE(STATE_4, true) (-:

关于c++ - 理解这段代码 : C++, #define table and enums,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10714615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com