尝试使用#define 将字符串数组分配给变量时出错(无效的初始值设定项错误)
Error when trying to assign array of strings to a variable using #define (invalid initializer error)
我正在尝试编译包含以下行的 C 代码:
//...
#ifdef CPU_GPREG_NAMES
static const char *reg_names[] = CPU_GPREG_NAMES;
#endif
//...
其中宏 CPU_GPREG_NAMES
定义为:
#define CPU_GPREG_NAMES \
"zero", "at", "v0", "v1", "a0", "a1", "a2", "a3", \
"t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", \
"s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", \
"t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra" \
但是上面第一个代码片段中的赋值似乎有问题,因为我在该特定行上收到以下错误:
error: invalid initializer
error: expected identifier or '(' before string constant
这个错误的原因是什么?
您的初始化程序需要花括号。因为你正在初始化的是一个数组,大括号表示你正在设置数组的多个元素:
#define CPU_GPREG_NAMES { \
"zero", "at", "v0", "v1", "a0", "a1", "a2", "a3", \
"t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", \
"s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", \
"t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra" }
你忘了放花括号:
#define CPU_GPREG_NAMES { \
"zero", "at", "v0", "v1", "a0", "a1", "a2", "a3", \
"t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", \
"s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", \
"t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra" \
}
或
static const char *reg_names[] = {CPU_GPREG_NAMES};
您需要花括号来为初始化程序定义数组。你可以这样做:
#define CPU_GPREG_NAMES { \
"zero", ... \
... \
}
或
static const char *reg_names[] = {CPU_GPREG_NAMES};
我正在尝试编译包含以下行的 C 代码:
//...
#ifdef CPU_GPREG_NAMES
static const char *reg_names[] = CPU_GPREG_NAMES;
#endif
//...
其中宏 CPU_GPREG_NAMES
定义为:
#define CPU_GPREG_NAMES \
"zero", "at", "v0", "v1", "a0", "a1", "a2", "a3", \
"t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", \
"s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", \
"t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra" \
但是上面第一个代码片段中的赋值似乎有问题,因为我在该特定行上收到以下错误:
error: invalid initializer
error: expected identifier or '(' before string constant
这个错误的原因是什么?
您的初始化程序需要花括号。因为你正在初始化的是一个数组,大括号表示你正在设置数组的多个元素:
#define CPU_GPREG_NAMES { \
"zero", "at", "v0", "v1", "a0", "a1", "a2", "a3", \
"t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", \
"s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", \
"t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra" }
你忘了放花括号:
#define CPU_GPREG_NAMES { \
"zero", "at", "v0", "v1", "a0", "a1", "a2", "a3", \
"t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", \
"s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", \
"t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra" \
}
或
static const char *reg_names[] = {CPU_GPREG_NAMES};
您需要花括号来为初始化程序定义数组。你可以这样做:
#define CPU_GPREG_NAMES { \
"zero", ... \
... \
}
或
static const char *reg_names[] = {CPU_GPREG_NAMES};