これは特に配列とは関係ありません。標準化された 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モードに切り替えることができます。