2

因此,我正在向一名学生教授基本 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 的期望。

我想我在这里错过了一些愚蠢的东西,但我什至不能......

4

2 回答 2

2

标准 C++ 不支持可变长度数组(长度由变量的运行时值确定)。

但是,自 1999 年以来,标准 C 支持它们。一些早于 1999 年的 C 编译器和一些 C++ 编译器支持 VLA(或类似功能)作为扩展。

一些编译器产品/套件(例如 gcc)具有选择支持特定 C 或 C++ 标准的选项,并且可以选择它们的挑剔程度(例如它们发出诊断或警告的构造)。

有必要阅读您的编译器文档,了解它默认支持哪些标准或特定于供应商的语言功能,如何更改这些,以及它如何发布诊断。

于 2015-01-26T13:48:06.927 回答
0

不,先生,你WholeLifeIsNotALie.jpg也在。:-)

是的,这在C. 鉴于您的编译器支持C99,它允许称为VLA[可变长度数组] 的东西。

我不太了解c++,但如果它正式支持,它应该在最新标准中定义的某个地方,否则支持作为编译器扩展提供。

旁注:您应始终检查 的返回值scanf()以确保正确输入。否则,你可能会遇到奇怪的事情。

于 2015-01-26T13:28:45.123 回答