#include <stdio.h>
#include <math.h>
int size = (int) sqrt(4);
int arr[size];
int main() {
return 0;
}
そして私は得た:
test.c:5: error: array bound is not an integer constant
誰かが私を助けることができますか?
#include <stdio.h>
#include <math.h>
int size = (int) sqrt(4);
int arr[size];
int main() {
return 0;
}
そして私は得た:
test.c:5: error: array bound is not an integer constant
誰かが私を助けることができますか?
可変サイズの静的ストレージを備えた配列(たとえば、「グローバル」配列)を定義することはできません。配列に自動ストレージがある場合(関数内の配列の場合)、VLAとして機能します。
icepackが正しく指摘しているように、VLAはC99で正式に導入されました。
int arr[size];
これにより、一定のサイズの配列が定義されます。ただしsize
、の呼び出しによって計算されたsqrt
ため、Cプログラムの実行方法による定数ではありません。
コンパイラは、プログラムのグローバルメモリレイアウトを作成するために、配列の大きさを知る必要があります。したがって、sqrt
実行時まで延期することはできません。また、Cには、コンパイル時に解決できる「数学」関数の概念はありません。
これを実行する唯一の方法は、自分で計算を実行し、結果(2
)を直接ソースコードに入れることです。
const int size=(int) sqrt(4);
事前に計算された定数で十分です。ただし、配列サイズもこの定数も変更できません。