结构初始化中静态存储类中的错误

时间:2013-03-06 07:32:09

标签: c data-structures struct

只要结构的存储类不是“静态”,

'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);
}

感谢,如果你提出一些见解。

1 个答案:

答案 0 :(得分:2)

具有静态存储的对象必须使用常量表达式或使用包含C中的常量表达式的聚合初始值设定项进行初始化。您尝试使用非静态对象s1初始化静态声明的对象student。这就是编译器抛出错误initializer element is not constant的原因。