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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- フランス語 フランス語文章の構造について質問 1 2022/08/24 18:02
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- 数学 Pythonのspecgramに関する質問です。 1 2022/12/04 19:18
- 数学 モデルのパラメータの定義がいまいちわかりません。 3 2022/10/11 15:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
long型のデータをバイト型の配...
-
値が変わるのはどうしてでしょ...
-
FILE構造体がどのように定...
-
Integer変数をカラにしたいので...
-
VBAにてcolorindexを変数に格納...
-
VBAのプログラムで、DIAG = 1# ...
-
構造体の代入と比較
-
VC++6.0 MFC ダイアログバーを...
-
ExcelVBAで質問です。離れた二...
-
c言語
-
C言語 配列の長さの上限
-
パイソンの
-
_tcscpy_s(wcscpy_s)の第二引数...
-
mallocについて
-
Excelですべての組合せ(重複組...
-
関数から配列を返すには?
-
文字列内の数字削除
-
Excel VBAで並べ替えをしたい
-
C言語の関数と配列に関する質問
-
newしないオブジェクトについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
C++ 構造体の一括初期化 {0}
-
long型のデータをバイト型の配...
-
「#undef」と「#define」の使い...
-
構造体のデータを丸ごとコピー...
-
VBAにてcolorindexを変数に格納...
-
C言語 構造体の中に共用体を定...
-
値が代入されてない時
-
異なる構造体のデータのコピー
-
typedefをプログラム中で解除す...
-
構造体のポインタにNULLが入らない
-
charとucharの違い
-
整数から16進数への変換 現在c...
-
VBAの変数のデータ型を変更する...
-
VB.NETのStructureというのはど...
-
構造体を型の異なる構造体に代入
-
日付チェック関数について
-
ユーザー定義型変数の一括初期化
-
構造体の初期化方法について
おすすめ情報
すみません、間違えました。
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のサイズなので、配列は無効になっていました。ご回答くださいありがとうございました。