
C言語のコンパイルエラーに関する質問です。
以下のような構造体の中に共用体を作成して、constで初期値を入れておきたいと考えています。
機械に適用する初期パラメータのような感じです。
「初期化子が多すぎます。」というコンパイルエラーがでるのですが、どこが多いのかわかりません。
どう修正すれば良のか教えていただけないでしょうか?
// 構造体定義
typedef struct {
Uint16_t time;
Uint8_t mode;
Uint16_t xxxx;
Uint16_t zzzz;
}PrgPatternA_t;
typedef struct {
Uint16_t time;
Uint8_t mode;
Uint16_t yyyy;
}PrgPatternB_t;
typedef struct {
Uint8_t pattern;
union {
PrgPatternA_t param_a[3];
PrgPatternB_t param_b[2];
}param;
} Program_t;
// 変数定義
EsCourseProgram_t ES_COURSE_PROG_DATA = {
PATTERN_A,
{ // Aパターン
// time mode xxxx yyyy
{ 10, MODE_A, 100, 50},
{ 10, MODE_A, 100, 50},
{ 10, MODE_A, 100, 50}
}
}
No.2ベストアンサー
- 回答日時:
どの初期値がどのメンバーに対応するかをじっと見ていくと, {} が 1つ足らない. つまり初期化子は
{
PATTERN_A,
{ // Aパターン
// time mode xxxx yyyy
{
{ 10, MODE_A, 100, 50},
{ 10, MODE_A, 100, 50},
{ 10, MODE_A, 100, 50}
}
}
}
でないといけない.
どこかの {} を忘れていたんだと思う. 共用体を初期化するときの {} かなぁ?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Integer変数をカラにしたいので...
-
「#undef」と「#define」の使い...
-
VBAのプログラムで、DIAG = 1# ...
-
リッチテキストボックスの中身...
-
typedefをプログラム中で解除す...
-
C言語 構造体の中に共用体を定...
-
1バイトデータの読み出しについて
-
命名規則 VB 構造体
-
構造体のポインタにNULLが入らない
-
VBAの変数のデータ型を変更する...
-
日付チェック関数について
-
配列を使わずに、変数名を動的...
-
C# DataGridView のヘッダーセ...
-
Excelですべての組合せ(重複組...
-
ExcelVBAでのkernel32(64bit)
-
isalpha()関数について
-
Run-Time Check Failure #3とい...
-
allocってなんですか?
-
define で 配列
-
CStringからchar*への型変換に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
「#undef」と「#define」の使い...
-
リッチテキストボックスの中身...
-
構造体のデータを丸ごとコピー...
-
構造体の初期化方法について
-
C言語 構造体の中に共用体を定...
-
構造体にする理由・利点・使用例
-
VBAの変数のデータ型を変更する...
-
命名規則 VB 構造体
-
VBAにてcolorindexを変数に格納...
-
aspでユーザー定義の構造体を作...
-
charとucharの違い
-
typedefをプログラム中で解除す...
-
long型のデータをバイト型の配...
-
構造体のポインタにNULLが入らない
-
値が代入されてない時
-
C++ 構造体の一括初期化 {0}
-
整数から16進数への変換 現在c...
-
関数の引数の順番の混乱を回避...
おすすめ情報
すみません、間違えました。
EsCourseProgram_t → Program_t
と置き換えていただけると助かります。
アドバイスありがとうございます。
最後の}は、実際は付けてコンパイルしております。(質問文には抜けていました。)
相変わらず矢印行で、「Too many initializer values.」というエラーが発生してしまいます。
unionとstructの使い方がそもそも間違っているのかと思っていましたが、やはり初期化の仕方が悪いのでしょうか?
Program_t PROG_DATA = {
0,
{ // Aパターン
// time mode xxxx yyyy
{ 10, 0, 100, 50},
{ 10, 0, 100, 50}, ←←←←←←←
{ 10, 0, 100, 50}
}
}
もしかして、unionで配列を定義してもリザーブされる領域は、添字数分ではなく、配列の1個分なのでしょうか?だから、配列3つ分で初期化しようとしているので、多すぎると言われている。
そうすると納得できます。もしご存知でしたら教えてください。
自己解決いたしました。
共用される部分は、PrgPatternA_tのサイズなので、配列は無効になっていました。ご回答くださいありがとうございました。