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 に答える