为什么赢了" gcc-std = c99 ...."允许我使用VLA?

时间:2016-01-02 01:29:53

标签: c arrays gcc

我正在尝试使用

编译下面的代码
  

gcc -c -g -std = c99 -MMD -MP -MF" build / Debug / Cygwin_4.x-Windows / main.o.d" -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 ++。第二个让我觉得使用VLA功能有问题,虽然我的理解是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;
}

1 个答案:

答案 0 :(得分:2)

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

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

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