我想将我的关键字保存在一个结构中:
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
变量不是常量,它们只是不能更改的变量。因此它们的值不能用在常量表达式中,比如在结构初始化器中。
一种解决方法是使用预处理器定义初始化程序:
#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]
关于c - 使用数组中的数据初始化结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36771645/