用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)