'C'似乎允许函数内部结构成员的初始化,尝试这样做会返回以下编译错误:
错误:初始化元素不是常量
代码片段
typedef struct data {
int age;
char *name;
} data_t;
void foo(data_t student)
{
//data_t s1 = student; <--- works
static data_t s1 = student; <--- throws error
printf("%s: s1.age: %d, s1.name: %s\n",__FUNCTION__,s1.age, s1.name);
}
感谢,如果你提出一些见解。
答案 0 :(得分:2)
具有静态存储的对象必须使用常量表达式或使用包含C中的常量表达式的聚合初始值设定项进行初始化。您尝试使用非静态对象s1
初始化静态声明的对象student
。这就是编译器抛出错误initializer element is not constant
的原因。