C 如何在声明时初始化字符数组
这两种方法等效吗C 如何在声明时初始化字符数组,c,gcc,C,Gcc,这两种方法等效吗 char a[10] = ""; char a[10] = { 0 }; 另外,我想声明初始化结构,但这在gcc中不起作用: struct c { char d[10]; int e; }; struct c f = { 0 }; a、 c:在函数“main”中: a、 c:33:警告:初始值设定项周围缺少大括号 a、 c:33:警告:(接近“f.d”的初始化) a、 c:33:警告:缺少初始值设定项 a、 c:33:警告:(接近“f.e”的初始化) a、
char a[10] = "";
char a[10] = { 0 };
另外,我想声明初始化结构,但这在gcc中不起作用:
struct c
{
char d[10];
int e;
};
struct c f = { 0 };
a、 c:在函数“main”中:a、 c:33:警告:初始值设定项周围缺少大括号
a、 c:33:警告:(接近“f.d”的初始化)
a、 c:33:警告:缺少初始值设定项
a、 c:33:警告:(接近“f.e”的初始化)
a、 c:33:警告:未使用的变量“f”是的,它们是等效的。 2) 试一试 您必须初始化这两个值。我记得也有问题,你可以试试
struct c f = (struct c){ "", 0 }
如果它不起作用
请参见。是的,两个char[]初始化是相同的-都将初始化数组以包含零 对于结构问题,请尝试:
struct c f = { {0}, 0 };
(对于支持C99的较新版本的gcc,您也可以)
struct c
{
char d[10];
int e;
};
struct c f = { "", 0 };
struct c g = { { 0 }, 0 };
“挑剔”是什么意思:
Osiris-2 JL: cat x.c
struct c
{
char d[10];
int e;
};
struct c f = { 0 };
Osiris-2 JL: gcc -c x.c
Osiris-2 JL: gcc -Wall -c x.c
x.c:6: warning: missing braces around initializer
x.c:6: warning: (near initialization for ‘f.d’)
Osiris-2 JL: gcc -O -Wall -c x.c
x.c:6: warning: missing braces around initializer
x.c:6: warning: (near initialization for ‘f.d’)
Osiris-2 JL: gcc -O -Wextra -Wall -c x.c
x.c:6: warning: missing braces around initializer
x.c:6: warning: (near initialization for ‘f.d’)
x.c:6: warning: missing initializer
x.c:6: warning: (near initialization for ‘f.e’)
Osiris-2 JL:
在这种情况下,GCC“set-fusy”意味着添加诸如“-Wall”和“-Wextra”之类的选项,以获得比GCC编译到的C标准所要求的更多的警告。因为我没有指定哪个标准,所以它是按照GNU-99标准工作的(-std=gnu99
)
要从问题中获取“unused variable”消息,我必须将变量f转换为静态变量。是的,前两个初始化是等效的 第二次初始化将在GCC中工作。你的代码完全正确。在C语言中,
{0}
是一个通用的零初始值设定项,几乎可以用于任何类型。这是一个由来已久的成语。您从GCC得到的只是警告,是由某个人提出的,他做出了一个相当愚蠢的决定,要干扰通用零初始值设定项的功能
[rant]GCC最近在某些方面已经走下坡路。[/rant]我理解他们的一般意图,但是具体的
{0}
表单应该被当作一个无警告的例外处理。使用GCC-Wall启用所有警告,在MSVC中,它在其中一个选项中的警告级别为4,不需要“初始化两个值”。
Osiris-2 JL: cat x.c
struct c
{
char d[10];
int e;
};
struct c f = { 0 };
Osiris-2 JL: gcc -c x.c
Osiris-2 JL: gcc -Wall -c x.c
x.c:6: warning: missing braces around initializer
x.c:6: warning: (near initialization for ‘f.d’)
Osiris-2 JL: gcc -O -Wall -c x.c
x.c:6: warning: missing braces around initializer
x.c:6: warning: (near initialization for ‘f.d’)
Osiris-2 JL: gcc -O -Wextra -Wall -c x.c
x.c:6: warning: missing braces around initializer
x.c:6: warning: (near initialization for ‘f.d’)
x.c:6: warning: missing initializer
x.c:6: warning: (near initialization for ‘f.e’)
Osiris-2 JL: