2

を使用してコンパイルしてみました-gccが、意図したとおりに機能しましたが、で追加すると-pedanticコンパイルされません。私はまだプログラミングの初心者で、この問題に遭遇したのは初めてなので、私にとってはかなりの問題です。

エラーの原因となっているコードは次のとおりです。

char *exercise[5]={"swimming", "running", "brisk walking", "weight lifting", "zumba"};

学びたいので修正コードだけでなく、解決策を教えていただけるとありがたいです。

4

1 に答える 1

7

これは特に配列とは関係ありません。標準化された C 言語 (ISO C90) の元のバージョンでは、宣言とコードを混在させることは禁止されています。

C90 では、 で囲まれた各ローカル ブロック{}はかなり厳密な構造を持っています。宣言 (存在する場合) で始まり、その後にステートメント (コード) が続きます。

それはあなたが従わなければならない形式です。配列宣言をブロックの先頭に移動します。イニシャライザは実行時の計算に依存しないため、簡単なはずです。それだけです。

{
  /* Declarations go here */
  char *exercise[5]={"swimming", "running", "brisk walking", "weight lifting", "zumba"};

  /* Statements (i.e. code) goes here */
}

もちろん、ここでの暗黙の質問は次のとおりです。本当に C90 を使用する必要があるのですか? C90 コンパイラ用のコードを書くように明示的に求められましたか? おそらく、コンパイラを C99 モードに切り替えて、この C90 固有の制限を忘れるべきでしょうか?

新しいバージョンの C 言語 (C99 以降) では、ステートメントと宣言を自由に組み合わせることができます。-std=c99コマンドラインで指定することで、GCCをC99モードに切り替えることができます。

于 2014-08-17T05:45:24.617 に答える