プロが教える店舗&オフィスのセキュリティ対策術

gccのワーニングメッセージの意味が分からないの
で質問させてください。
// **************************
void Vfunc1(void)
{}
void Vfunc2(void)
{}

typedef void(*VFUNC)(void);

typedef struct {
VFUNC svc[2];
} VFUNC_STR ;

const VFUNC_STR VfuncStr = {
Vfunc1,Vfunc2
};
// **************************
関数配列を引き渡しする構造体を作っているのです
が、以上のソースをgccでコンパイルすると、
warning: missing braces around initializer
warning: (near initialization for 'VfuncStr.svc')
というワーニングが出ます。
ところが構造体定義を
// **************************
typedef struct {
VFUNC svc1;
VFUNC svc2;
} VFUNC_STR ;
// **************************
と記述し直すとワーニングは出ませんでした。
どういう問題なのでしょうか?
メンバ svcを配列表現しないと使いづらいので、ど
う表現すればワーニングを回避できるのかご教示く
ださい。

ちなみに
// **************************
const VFUNC svc[2] = {
Vfunc1,Vfunc2
};
// **************************
と記述してもワーニングは出ないので、構造体のメン
バとして記述すると、 svcが配列へのポインタと認識
されて実体を外に作成してしまうのかなと想像してい
ます。

A 回答 (1件)

const VFUNC svc[2] = {


 {Vfunc1,Vfunc2}
};

外側の中括弧は構造体の、
内側の中括弧は配列の
初期値を示します。
    • good
    • 0
この回答へのお礼

ありがとうございます。
構造体内に配列がある場合は、配列を{}で括
る必要があるのですね。
括るとワーニングが出なくなりました。
回答にあるような単なる配列の場合は、{}で
二重に括ると別のメッセージが出るようです。
warning: braces around scalar initializer
warning: (near initialization for 'svc[0]')
warning: excess elements in scalar initializer
warning: (near initialization for 'svc[0]')

お礼日時:2004/06/10 10:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています