C言語でグローバル構造体を初期化する 質問する

C言語でグローバル構造体を初期化する 質問する

C で次のことを実現する最良の方法は何ですか?

#include <stdio.h>

struct A
{
    int x;
};

struct A createA(int x)
{
    struct A a;
    a.x = x;
    return a;
}

struct A a = createA(42);

int main(int argc, char** argv)
{
    printf("%d\n", a.x);
    return 0;
}

上記のコードをコンパイルしようとすると、コンパイラは次のエラーを報告します。

「初期化要素が定数ではありません」

悪い行は次のようになります:

struct A a = createA(42);

何が間違っているのか誰か説明してもらえますか? 私は C の経験があまりありません。 よろしくお願いします!

ベストアンサー1

struct A a = { .x = 42 };

その他のメンバー:

struct Y {
    int r;
    int s;
    int t;
};

struct Y y = { .r = 1, .s = 2, .t = 3 };

あなたもそうすることができます

struct Y y = { 1, 2, 3 };

同じことがユニオンにも適用され、すべてのメンバーを含める必要はなく、メンバーを正しい順序に並べる必要もありません。

おすすめ記事