【发布时间】:2015-03-24 22:01:12
【问题描述】:
所以,我正在向一名学生教授基本 C 编程以进行测试。
说到数组声明,我告诉他:
“你可以这样做”
int myArray[10];
-> 告诉他代码可以编译
“你也可以这样做”
#define ARRAY_SIZE 10
[...]
int myArray[ARRAY_SIZE];
-> 告诉他代码可以编译
“但你不能这样做!”
int arraySize = 10;
int myArray[arraySize];
-> 告诉他代码不会编译......但它确实可以编译!
myWholeLifeIsALie.jpg
我在 MinGW 中使用 DevC++。
汗,我打开Linux,做了一个简单的测试程序
#include <stdio.h>
int main()
{
int size;
int i;
scanf("%d", &size);
int array[size];
for(i = 0; i < size; i++)
array[i] = i*2;
return 0;
}
它可以使用 g++ 和 gcc 编译和运行。
相反,MS Visual Studio 2010 编译器告诉我他“期望常量表达式”。这也是我对 g++/gcc 的期望。
我想我在这里遗漏了一些愚蠢的东西,但我什至不能......
【问题讨论】:
-
Does “int size = 10;” yield a constant expression? ...
gcc和clang的可能副本支持 VLA 作为 C++ 中的扩展,但 Visual Studio 不支持。 -
C 和 C++ 是不同的语言。
-
正如@YuHao 指出的那样,您的问题表明您使用的是C++ 编译器,但您也用C 标记,这没有多大意义。尤其是在这种情况下,因为 C 和 C++ 在这方面是不同的。
-
我使用 C (gcc) 和 C++ (g++) 对其进行了测试,因此我使用 C 和 C++ 进行了标记。我通常使用 C++ 工作,所以我不知道 C 的“特性”。顺便说一句,g++ 似乎很有魅力。
-
除了上面所说的一切之外,在教授编程语言时,您必须绝对确保您(和学生)根据 C 标准进行编译。对于 gcc,您可以使用
gcc -std=c11 -pedantic-errors -Wall执行此操作,其中 -std=c11 可以替换为您正在教授的标准。如果你不知道 C90、C99 和 C11 之间的区别,那么也许你不应该教 C 编程......
标签: c++ c arrays gcc variable-length-array