我正在尝试编译包含以下行的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
此错误的原因是什么?
答案 0 :(得分:2)
你忘记了大括号:
#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};
答案 1 :(得分:2)
您需要花括号来为初始化程序定义数组。你可以这样做:
#define CPU_GPREG_NAMES { \
"zero", ... \
... \
}
或
static const char *reg_names[] = {CPU_GPREG_NAMES};
答案 2 :(得分:1)
您需要在初始化程序周围使用花括号。因为您正在初始化的是一个数组,所以大括号表示您正在设置该数组的多个元素:
#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" }