構造体を取る関数があり、その変数を配列に格納しようとしています:
int detect_prm(Param prm) {
int prm_arr[] = {prm.field1, prm.field2, prm.field3};
return 0;
}
しかしgcc -Wall -ansi -pedantic-errors -Werror
、次のエラーが表示されます。
初期化要素は読み込み時に計算できません
私には問題ないように見えますが、何が問題なのですか?
構造体を取る関数があり、その変数を配列に格納しようとしています:
int detect_prm(Param prm) {
int prm_arr[] = {prm.field1, prm.field2, prm.field3};
return 0;
}
しかしgcc -Wall -ansi -pedantic-errors -Werror
、次のエラーが表示されます。
初期化要素は読み込み時に計算できません
私には問題ないように見えますが、何が問題なのですか?
マイクの答えは絶対に正しいです。
ただし、GNU C 拡張機能を使用できる場合、または代わりに新しくより優れた C99 標準を使用できる場合 (--std=c99
オプションを使用)、このような初期化子は完全に合法です。C99 標準は 9 年も前から公開されており、ほとんどの C コンパイラはそれを非常にうまくサポートしています... 特にこの機能。
これは C では違法です。初期化子リストはコンパイル時の定数式でなければなりません。代わりに次の操作を行います。
int prm_arr[3];
prm_arr[0] = prm.field1;
prm_arr[1] = prm.field2;
prm_arr[2] = prm.field3;