很奇怪,C选项使用gcc是可以编译通过的。
int main() { int i = 10; int arr[i]; return 0; }
# gcc --version | head -n1 gcc (Debian 8.3.0-6) 8.3.0
A.#define N 2017 int arr[N];这个写法是正确的。宏定义将N替换为2017,然后定义了一个大小为2017的整型数组arr。
B.#define N 2017 int arr[N*2];这个写法也是正确的。宏定义将N替换为2017,然后定义了一个大小为2017*2的整型数组arr。
C.int i=2017; int arr[i];这个写法不是标准的C语言写法,因为数组的大小必须是一个常量表达式。但是一些编译器可能支持这种变量大小的数组定义,称为变长数组(Variable Length Arrays, VLA)。
D.int arr[]={1};这个写法也是正确的。这行代码定义了一个整型数组arr,数组中只有一个元素,即1。