在C中初始化全局结构

Sco*_*ott 16 c struct initialization constants

在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;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译上面的代码时,编译器报告以下错误:

"初始化元素不是常数"

糟糕的是这一行:

struct A a = createA(42);
Run Code Online (Sandbox Code Playgroud)

有人可以解释什么是错的吗?我不是很有经验C.谢谢!

nat*_*ose 18

struct A a = { .x = 42 };
Run Code Online (Sandbox Code Playgroud)

更多会员:

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

struct Y y = { .r = 1, .s = 2, .t = 3 };
Run Code Online (Sandbox Code Playgroud)

你也可以这样做

struct Y y = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

同样适用于工会,您不必包含所有成员,甚至不必按正确的顺序排列.


Bjo*_*rnD 14

为什么不使用静态初始化?

struct A a = { 42 };
Run Code Online (Sandbox Code Playgroud)

  • 另外:您不能调用函数来静态初始化数据。这就是你的编译器错误试图告诉你的。 (2认同)
  • 啊没关系.我想到了.显然我可以这样做:struct B b = {{42}}; 太好了! (2认同)

Jar*_*Par 5

这里的问题是 C 中的全局 / 文件静态变量必须具有在编译时已知的值。这意味着您不能使用用户定义的函数来初始化该值。它必须是一个常量表达式