C 尝试使用#define将字符串数组分配给变量时出错(无效初始值设定项错误)
我正在尝试编译一个包含以下行的C代码:C 尝试使用#define将字符串数组分配给变量时出错(无效初始值设定项错误),c,string,macros,variable-assignment,C,String,Macros,Variable Assignment,我正在尝试编译一个包含以下行的C代码: //... #ifdef CPU_GPREG_NAMES static const char *reg_names[] = CPU_GPREG_NAMES; #endif //... 其中,宏CPU\u GPREG\u name定义为: #define CPU_GPREG_NAMES \ "zero", "at", "v0", "v1", "a0", "a1", "a2
//...
#ifdef CPU_GPREG_NAMES
static const char *reg_names[] = CPU_GPREG_NAMES;
#endif
//...
其中,宏CPU\u GPREG\u name
定义为:
#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" }
你忘了放花括号:
#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" \
}
或
您需要大括号来定义初始值设定项的数组。您可以执行以下任一操作:
#define CPU_GPREG_NAMES { \
"zero", ... \
... \
}
或
您需要大括号来定义初始值设定项的数组。您可以执行以下任一操作:
#define CPU_GPREG_NAMES { \
"zero", ... \
... \
}
或
您还需要在第一行转义换行。@Barmar谢谢,现在已修复。您还需要在第一行转义换行。@Barmar谢谢,现在已修复。