为什么“gcc-std = c99 ……”不允许我使用VLA?

我正在尝试使用以下代码编译

gcc -c -g -std = c99 -MMD -MP -MF“build / Debug / Cygwin_4.x-Windows / main.od”-o build / Debug / Cygwin_4.x-Windows / main.o main.cpp

下面的代码在函数func中使用VLA,我认为应该由c99支持,我相信我通过标志-std = c99使用。

问题是,当我运行此操作时,我收到以下警告和错误:

cc1plus:警告:命令行选项’-std = c99’对C / ObjC有效但对C ++无效

main.cpp:11:35:错误:在’]’之前使用函数体外的参数令牌void func(int a,int b,int arry [a] [b]){^

main.cpp:11:38:错误:在’]’之前使用函数体外的参数令牌void func(int a,int b,int arry [a] [b]){

第一个警告让我怀疑gcc是否正在尝试将代码编译为c或c ++。 第二个让我觉得使用VLAfunction有问题,虽然我的理解是c99应该支持。

代码是:

void func(int a, int b, int arry[a][b]){ //Do stuff } int main(int argc, char** argv) { int setSize=6; int sets[setSize][setSize]={0}; func(setSize,setSize,sets); return 0; } 

gcc是Gnu编译器集合 ,可以作为更多只有C的前端(虽然不使用特定于语言的填充程序可能会失败而不传递其他选项,如果它可以工作)。

如果您的文件没有正确的扩展名,您可以通过-x显式设置语言,例如-xc

但是,最好的选择是修复文件名。