14

構造体を取る関数があり、その変数を配列に格納しようとしています:

int detect_prm(Param prm) {
  int prm_arr[] = {prm.field1, prm.field2, prm.field3};

  return 0;
}

しかしgcc -Wall -ansi -pedantic-errors -Werror、次のエラーが表示されます。

初期化要素は読み込み時に計算できません

私には問題ないように見えますが、何が問題なのですか?

4

2 に答える 2

16

マイクの答えは絶対に正しいです。

ただし、GNU C 拡張機能を使用できる場合、または代わりに新しくより優れた C99 標準を使用できる場合 (--std=c99オプションを使用)、このような初期化子は完全に合法です。C99 標準は 9 年も前から公開されており、ほとんどの C コンパイラはそれを非常にうまくサポートしています... 特にこの機能。

于 2008-10-02T05:39:16.743 に答える
15

これは C では違法です。初期化子リストはコンパイル時の定数式でなければなりません。代わりに次の操作を行います。

int prm_arr[3];

prm_arr[0] = prm.field1;
prm_arr[1] = prm.field2;
prm_arr[2] = prm.field3;
于 2008-10-02T05:13:50.690 に答える