e167.c

構造体初期化要素過多
#ident	"$Id: e167.c.html 187 2006-05-17 05:23:14Z ono.mki $"
/*###7 [cc] 警告: AAA:e167: 標準Cではstruct の初期化要素過多です sfter 【 XXX 】%%%*/
struct  branch_cntrl {
        int                     (*start_addr)();
        int                     arg[4];
};
struct boot_cntrl {
        struct branch_cntrl     branch[4];
        int                     bcntrl_RFU1;
        int                     bcntrl_RFU2;
};
#ifndef ANSI                    /*      K&R-C時代の構造体初期化         */
struct  boot_cntrl bcntrl = {
        {   (int (*)())0x81084126,/* ハトヤよい風呂 */  {1, 2, 3, 4}    },
        {   (int (*)())0x14142135,                      {5, 6, 7, 8}    },
        {   (int (*)())0x17320508 ,                     {9, 10,11,12}   },
        {   (int (*)())0x31415926 ,                     {13,14,15,16}   },
        0x11111111,
        0x22222222,
};
#else                           /*      ANSI-C時代の構造体初期化        */
struct  boot_cntrl bcntrl = {
        {/*LOOK*/
            {(int (*)())0x81084126,/* ハトヤよい風呂 */ {1, 2, 3, 4}    },
            {(int (*)())0x14142135,                     {5, 6, 7, 8}    },
            {(int (*)())0x17320508 ,                    {9, 10,11,12}   },
            {(int (*)())0x31415926 ,                    {13,14,15,16}   },
        } /*LOOK*/,
        0x11111111,
        0x22222222,
};
#endif

解説 K&R-Cの構造体初期化の仕様と ANSI-Cの構造体初期化の仕様は、異なります。 この例では、 K&R-Cではコンパイル可能でも、 ANSI-Cではコンパイルエラーとなります。 実行結果を同じにするには、 『ANSI-C時代の構造体初期化』 を参考にして下さい。 より、詳細な説明は 『プログラミング言語C 第2版 ANSI規格準拠 カーニハン リッチー著/石田晴久訳』 「付録A8.7」Page272 を参照して下さい。