所以,我正在向学生教授基础C编程以进行测试。
谈到阵列声明,我告诉他:
"你可以这样做"
int myArray[10];
- >告诉他代码编译
"你也可以这样做"
#define ARRAY_SIZE 10
[...]
int myArray[ARRAY_SIZE];
- >告诉他代码编译
"但你不能这样做!"
int arraySize = 10;
int myArray[arraySize];
- >告诉他代码不会编译......但它实际上编译了!
myWholeLifeIsALie.jpg
我正在使用DevC ++和MinGW。
出汗,我打开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编译器告诉我他&#34;期望常量表达&#34;。这也是我对g ++ / gcc的期望。
我想我在这里失去了一些愚蠢的东西,但我甚至不能......
答案 0 :(得分:2)
标准C ++不支持可变长度数组(长度由变量的运行时值确定)。
然而,自1999年以来,它们在标准C中得到支持。一些C编译器早于1999年,一些C ++编译器支持VLA(或类似功能)作为扩展。
某些编译器产品/套件(例如gcc)具有选择支持特定C或C ++标准的选项,并且可以选择它们是多么挑剔(例如,它们为其发出诊断或警告的构造)。
有必要阅读您的编译器文档,以确定默认情况下它支持的标准或供应商特定语言功能,如何更改这些功能以及如何进行诊断。
答案 1 :(得分:0)
不,先生,您的WholeLifeIsNotALie.jpg
也在那里。 : - )
是的,C
可以这样做。鉴于编译器支持C99
,它允许调用VLA
[可变长度数组]。
我对c++
知之甚少,但如果它正式支持,它应该在最新标准中定义,否则支持作为编译器扩展。
SideNote:您应该始终检查scanf()
的返回值以确保正确输入。否则,你可能会遇到奇怪的事情。