GCC 缺少带有静态模块级变量的初始化程序周围的大括号

GCC missing braces around initializer with static module level variable

我收到以下警告:

test.c:8:1: warning: missing braces around initializer [-Wmissing-braces]
 static foo x = {0.0f, 0.0f, 0.0f};
 ^
test.c:8:1: warning: (near initialization for ‘x.a’) [-Wmissing-braces]

我正在编译 gcc -Wall test.c

这是我的代码:

#include <stdio.h>

typedef struct
{
    float a[3];
}foo;

static foo x = {0.0f, 0.0f, 0.0f};

int main()
{
    printf("%lf", x.a[0]);

    return 0;
}

我是否错误地初始化了 x?

当我在没有 -Wall 的情况下编译时,它可以工作。

你应该使用:

static foo x ={ {0.0f, 0.0f, 0.0f} };

外括号用于指示struct foo的初始化。

内括号表示array a的初始化。

形式上,您的初始化应如下所示:

static foo x = {{0.0f, 0.0f, 0.0f}};