我想将我的关键字保存在结构中:
typedef const char* label;
const struct keywords_t
{
label init;
label moveUnit;
} keywords;
Run Code Online (Sandbox Code Playgroud)
但我希望能够检查关键字是否对for循环有效,所以我尝试初始化这样的结构:
const label allowed_keywords[] =
{
"INIT",
"MOVE"
};
const struct keywords_t keywords =
{
allowed_keywords[0],
allowed_keywords[1]
};
Run Code Online (Sandbox Code Playgroud)
这给了我一个
error: initializer element is not constant
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?但是整个数组是不变的.
在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
};
Run Code Online (Sandbox Code Playgroud)
其他方法可能是使用枚举和数组的组合:
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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |