
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が配列へのポインタと認識
されて実体を外に作成してしまうのかなと想像してい
ます。
No.1ベストアンサー
- 回答日時:
const VFUNC svc[2] = {
{Vfunc1,Vfunc2}
};
外側の中括弧は構造体の、
内側の中括弧は配列の
初期値を示します。
ありがとうございます。
構造体内に配列がある場合は、配列を{}で括
る必要があるのですね。
括るとワーニングが出なくなりました。
回答にあるような単なる配列の場合は、{}で
二重に括ると別のメッセージが出るようです。
warning: braces around scalar initializer
warning: (near initialization for 'svc[0]')
warning: excess elements in scalar initializer
warning: (near initialization for 'svc[0]')
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
C言語のポインターに関する警告
C言語・C++・C#
-
至急です! マクロ定義で #define NUMBER 10とし 関数で max(double ma
C言語・C++・C#
-
コンパイルエラーについて
C言語・C++・C#
-
-
4
「#undef」と「#define」の使い方について
C言語・C++・C#
-
5
C言語でヘッダファイルにグローバル変数を宣言する
C言語・C++・C#
-
6
C言語のポインタに直接アドレスを割り振りしたい
C言語・C++・C#
-
7
C言語 配列の長さの上限
C言語・C++・C#
-
8
C言語初心者の質問失礼します。
C言語・C++・C#
-
9
エラーの意味は? Lvalue required
C言語・C++・C#
-
10
メモリをアドレスを直接指定して値を取得するには
C言語・C++・C#
-
11
配列をnビットシフトする
C言語・C++・C#
-
12
C言語 構造体の中に共用体を定義した変数の初期化に関して
C言語・C++・C#
-
13
C言語において、 配列要素をひとつずつ前にずらすコード
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列を使わずに、変数名を動的...
-
C言語 配列の長さの上限
-
C# Listを使わずに2次元配列の...
-
【速いブラインドタッチ】手を...
-
ExcelVBAで質問です。離れた二...
-
メモリの初期値
-
配列で格納したものをmsgboxで...
-
Excel、VBAのユーザーフォーム...
-
配列の参照渡しで型が一致しま...
-
C言語で特定列だけを抽出して配...
-
配列をEraseしてもメモリが開放...
-
C++ vectorに配列をプッシュしたい
-
銀行ATMの数字キーの配列
-
if文の判定条件に配列
-
2次元配列でエラーがでます。
-
C言語の配列:「*(w+a)=・・・...
-
先頭アドレスとは何ですか?
-
VBで構造体の配列を関数に渡す...
-
配列の総和
-
プログラムが書けません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
先頭アドレスとは何ですか?
-
C# Listを使わずに2次元配列の...
-
配列を使わずに、変数名を動的...
-
複数の選択範囲の行番号を個別...
-
配列で格納したものをmsgboxで...
-
【速いブラインドタッチ】手を...
-
C言語で特定列だけを抽出して配...
-
配列をEraseしてもメモリが開放...
-
配列を含む構造体の初期値について
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
メモリの初期値
-
C++ vectorに配列をプッシュしたい
-
Redimした動的配列はEraseする...
-
VBで構造体の配列を関数に渡す...
-
【C言語】配列の中に配列を入れ...
-
ExcelVBAで質問です。離れた二...
-
Functionの戻り値を2次元配列...
-
ガウスの消去法のプログラム
おすすめ情報