0

只要结构的存储类不是“静态”,'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);
}

欣赏,如果你提出一些见解。

4

1 回答 1

2

必须使用常量表达式或包含 C 中常量表达式的聚合初始化程序来初始化具有静态存储的对象。您正试图s1通过非静态对象初始化静态声明的对象student。这就是编译器抛出错误的原因initializer element is not constant

于 2013-03-06T07:39:54.477 回答