4
#include <stdio.h>

typedef struct
{
    int as;
    int bs;
    int cs;
}asd_t;

typedef struct
{
    asd_t asd[10];
}asd_field_t;    

typedef struct
{
    int a;
    int b;
    asd_field_t  asd_field[10];
}abc_t;    

int main()
{
    abc_t abc ={0,1,{0}};
    return 0;
}

上記のコードでは、構造を初期化しようとしていますabc_t。上記のコードを次のようにコンパイルします。

gcc -Wall sample.c

私に与える:

sample.c: In function 'main':
sample.c:26: warning: missing braces around initializer
sample.c:26: warning: (near initialization for 'abc.asd_field[0].asd')

この警告を回避するにはどうすればよいですか?

4

4 に答える 4

5

構造体abc_tには、タイプasd_field_t内に別の構造体があり、{0}を使用して0に初期化します。GCCからの警告は、その構造体(asd_field)のすべてのメンバーを1つずつ埋めるのではなく、ゼロにするためです。{0}を使用して構造体全体をゼロにすることは完全に有効であると標準が見なしていることを考えると、GCCによるこの動作は正しくないという議論があります。GCCのバグレポートはここで読むことができます

オプション-Wno-missing-bracesを渡すことで、迷惑な警告を無効にして、他のすべての壁の警告を受け取ることもできます。 gcc -Wall -Wno-missing-braces test.c -o test

于 2013-03-26T09:21:30.400 に答える
2

これを試して:

abc_t abc ={0,1,{{{{0,0,0}}}}};
于 2013-03-26T09:36:40.250 に答える
0

構造体に配列をネストする必要abc_tがあるため、次のような操作を行う必要があります。

abc_t abc = {0,1,{{0,0,0}}};
于 2013-03-26T10:20:35.290 に答える
-1

abc_t abc = {0,1、{{{{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0} 、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}}}、{{{0,0、 0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0} 、{0,0,0}、{0,0,0}、{0,0,0}}}、{{{0,0,0}、{0,0,0}、{0,0、 0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0} 、{0,0,0}}}、{{{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0、 0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}}}、{{{0、 0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0、 0}、{0,0,0}、{0,0,0}、{0,0,0}}}、{{{0,0,0}、{0,0,0}、{0、 0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0、 0}、{0,0,0}}}、{{{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0、 0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}}}、{{{ 0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0、 0,0}、{0,0,0}、{0,0,0}、{0,0,0}}}、{{{0,0,0}、{0,0,0}、{ 0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0、 0,0}、{0,0,0}}}、{{{0、0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0,0}、{0,0、 0}、{0,0,0}、{0,0,0}、{0,0,0}}}}};

于 2013-03-26T11:11:23.287 に答える