我应该信任哪个编译器?

Вал*_*нов 4 c arrays gcc visual-studio variable-length-array

这将是一个新手问题,但我正在尝试使用C语言(而不是C++)进行一个小练习,我遇到了一些问题.

假设我想在一个方法中使用一个数组,该方法的大小取决于其中一个参数:

void someFunc(int arSize)
{
    char charArray[arSize];
    // DO STUFF
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我尝试将其编译为Visual Studio 2013中.c文件时,我收到一条错误消息,指出不允许使用非常量数组.但是,相同的代码在GNU编译器下的CodeBlocks中工作.我应该相信哪一个?编译器的行为是否正常?我一直认为,如果你正在做一些编译器不喜欢的事情,你不应该首先做它,因为它不是标准.

任何输入都很有用!我来自Python背景,我正在尝试更多地参与数据结构和算法的编程.

您可以告诉我的平台是Windows.如果这个问题需要更多信息才能回答,请告诉我.

Sha*_*our 9

可变长度数组(VLA)是C99功能,Visual Studio 直到最近支持C99,我不确定它是否目前支持最新版本的VLA.另一方面,gcc虽然不完全支持C99 .gcc支持VLA作为C99模式之外的扩展,即使在C++中也是如此.

草案C99标准部分6.7.5.2 数组声明者第4段:

[...]如果size是一个整型常量表达式,并且元素类型具有已知的常量大小,则数组类型不是可变长度数组类型; 否则,数组类型是可变长度数组类型.