※ ChatGPTを利用し、要約された質問です(原文:配列を含む構造体の初期値について)
配列を含む構造体の初期値について
このQ&Aのポイント
配列を含む構造体の初期化方法について質問します。ソースコードの中で構造体を初期化する際に、配列部分の初期値の記述方法に関してワーニングが発生しました。配列を要素ごとに初期化したい場合、どのように記述すれば良いでしょうか?
配列を要素ごとに初期化するための方法について教えてください。ソースコードの中で構造体を初期化する際に、配列部分の初期値を要素ごとに指定したい場合、どのように記述すれば良いでしょうか?
配列を要素ごとに初期化するための記述方法について質問です。ソースコードの中で構造体を初期化する際に、配列部分の初期値の記述方法に関してワーニングが出てしまいます。要素ごとに初期化するための正しい記述方法を教えてください。
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が配列へのポインタと認識
されて実体を外に作成してしまうのかなと想像してい
ます。
お礼
ありがとうございます。 構造体内に配列がある場合は、配列を{}で括 る必要があるのですね。 括るとワーニングが出なくなりました。 回答にあるような単なる配列の場合は、{}で 二重に括ると別のメッセージが出るようです。 warning: braces around scalar initializer warning: (near initialization for 'svc[0]') warning: excess elements in scalar initializer warning: (near initialization for 'svc[0]')