使用数组中的数据初始化结构

男性主义者

我想将关键字保留在结构中:

typedef const char* label;
const struct keywords_t
{
    label init;
    label moveUnit;
} keywords;

但是我希望能够通过for循环检查关键字是否有效,因此我尝试像这样初始化结构:

const label allowed_keywords[] =
{
    "INIT",
    "MOVE"
};

const struct keywords_t keywords =
{
    allowed_keywords[0],
    allowed_keywords[1]
};

这给了我一个

error: initializer element is not constant

我究竟做错了什么?但是,整个数组是恒定的。

用户名

在C语言中,const变量不是常量,它们只是无法更改的变量。因此,它们的值不能在常量表达式中使用,例如在struct initializer中。

一种解决方法是对预处理器使用预处理器定义:

#define KEYWORD_INIT   "INIT"
#define KEYWORD_MOVE   "MOVE"

const label allowed_keywords[] =
{
    KEYWORD_INIT,
    KEYWORD_MOVE
};

const struct keywords_t keywords = 
{
    KEYWORD_INIT,
    KEYWORD_MOVE
};

其他方法可能是结合使用枚举和数组:

typedef enum {
    KEYWORD_INIT,
    KEYWORD_MOVE
} label;

const char * const keyword_strings[] = {
    "INIT",
    "MOVE"
};

const struct keywords_t keywords =
{
    KEYWORD_INIT,
    KEYWORD_MOVE
};

// Getting keyword string would be like this:
// keyword_strings[keywords.moveUnit]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章