GCC在初始化程序中缺少使用静态模块级变量的大括号

时间:2015-02-25 06:34:04

标签: c gcc

我收到以下警告:

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的情况下编译时,它可以工作。

2 个答案:

答案 0 :(得分:3)

您应该使用:

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

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

内部大括号用于指示array a的初始化。

答案 1 :(得分:1)

正式地,您的初始化应如下所示:

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