2013-03-06 44 views
0

只要结构的存储类不是'static','C'似乎允许初始化函数内的结构成员,尝试这样做会返回以下编译错误:结构初始化中的静态存储类中的错误

error: initializer element is not constant

代码剪断

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

你想做什么?为什么你想'静态',你知道这是什么意思? – 2013-03-06 07:34:51

+0

我知道被声明为“静态”的变量将被存储在数据段中,因此它们将通过上下文切换保留它们的值,但我没有意识到“静态存储的对象必须用常量表达式或用C中包含常量表达式的聚合初始值设定项进行初始化“,@meyumer在下面指出。我正在试图确认我在某处阅读的内容。 – Amit 2013-03-06 09:42:04

回答

2

对象具有静态存储有与常量表达式或用含有C.常量表达式骨料初始化您正在尝试通过非静态对象student初始化静态声明的对象s1进行初始化。这就是编译器抛出错误initializer element is not constant的原因。