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