簡単な答えvariable modified array at file scope is not possible
。
詳細:
integral constant expression
配列の長さはコンパイル時に指定する必要があるため、コンパイル時に作成します。
このような :
#define a 6
#define b 3
または、c99標準に従ってください。gccのようにコンパイルします。
gcc -Wall -std=c99 test.c -o test.out
ここでの問題は、長さを提供する可変長配列が初期化されない可能性があるため、このエラーが発生することです。
単に
static int a =6;
static int b =3;
void any_func()
{
int Hello [a][b]; // no need of initialization no static array means no file scope.
}
次に、forループまたは任意のループを使用して配列を埋めます。
詳細については、デモのみ:
#include <stdio.h>
static int a = 6;
int main()
{
int Hello[a]={1,2,3,4,5,6}; // see here initialization of array Hello it's in function
//scope but still error
return 0;
}
root@Omkant:~/c# clang -std=c99 vararr.c -o vararr
vararr.c:8:11: error: variable-sized object may not be initialized
int Hello[a]={1,2,3,4,5,6};
^
1 error generated.
静的を削除して初期化を提供すると、上記のようなエラーが発生します。
ただし、初期化だけでなく静的な状態を維持しても、エラーが発生します。
ただし、初期化を削除してそのままにしておくとstatic
、以下のエラーが発生します。
error: variable length array declaration not allowed at file scope
static int Hello[a];
^ ~
1 error generated.
したがって、可変長配列宣言はファイルスコープでは許可されないため、任意の関数内で関数またはブロックスコープにします(ただし、関数スコープにする場合は初期化を削除する必要があります)
注:C
タグが付けられているので、作成a
や作成b
はconst
役に立ちませんが、C++
const
正常に機能します。