C 尝试使用#define将字符串数组分配给变量时出错(无效初始值设定项错误)

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

我正在尝试编译一个包含以下行的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", "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谢谢,现在已修复。