【问题标题】:error in static storage class in structure initialization结构初始化中的静态存储类错误
【发布时间】:2013-03-06 07:32:09
【问题描述】:

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

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

【问题讨论】:

  • 你想做什么?为什么你想要static,你知道在这种情况下它是什么意思吗?
  • 我知道声明为“静态”的变量将存储在数据段中,因此,它们将在上下文切换中保留其值,但我不知道这样一个事实“必须使用常量表达式或包含 C 中常量表达式的聚合初始化程序来初始化具有静态存储的对象。”,@meyumer 在下面指出。我正在尝试这样做以确认我在某处读到的内容。

标签: c data-structures struct


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 2023-04-05
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多