1
我有以下代码:为什么我在用const指定数组大小的const int上获得不同的编译器行为?
static const int constant_int_value = 10;
static int my_array[constant_int_value];
int main(void)
{
my_array[0] = 10;
}
铛发出警告,但编译它:
clang -Weverything -std=c11 array_index.c
array_index.c:4:20: warning: variable length array used [-Wvla]
static int my_array[constant_int_value];
^
array_index.c:4:12: warning: size of static array must be an integer constant expression [-Wpedantic]
static int my_array[constant_int_value];
^
2 warnings generated.
看来,我使用的是整型常量,所以我不明白的警告。
GCC不编译的代码:
gcc -Wall -Wextra -Wpedantic -std=c11 array_index.c
array_index.c:4:12: error: variably modified ‘my_array’ at file scope
static int my_array[constant_int_value];
仅仅因为你使用const不会使它成为一个常量。奇怪,我知道。使用'#define constant_int_value 10' – Gab