相关疑难解决方法(0)

来自GCC但不是Clang的复合文字和指定的初始化器警告

gcc -std=c99 -Wextra这段代码编译:

#include <stdio.h>

struct T {
    int a;
    int *b;
    int c;
};

int main(void)
{
    struct T t = {.b = ((int []){1, 1})};

    printf("%d\n", t.b[1]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

给我一个警告:

demo.c:11:12: warning: missing initializer for field ‘c’ of ‘struct T’ [-Wmissing-field-initializers]
     struct T t = {.b = ((int []){1, 1})};
            ^
demo.c:6:9: note: ‘c’ declared here
     int c;
         ^
Run Code Online (Sandbox Code Playgroud)

但是指定的初始值设定项应该初始化为其余成员的零,即使它们被省略.

为什么警告?(clang编译同一段代码而不发出警告)

gcc version 6.3.0 20170516 (Debian 6.3.0-18) 
clang version 3.8.1-24 (tags/RELEASE_381/final)
Run Code Online (Sandbox Code Playgroud)

c gcc clang compound-literals designated-initializer

14
推荐指数
1
解决办法
397
查看次数