我正在尝试使用
编译下面的代码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;
}
答案 0 :(得分:2)
gcc
是Gnu编译器集合,可以作为更多只有C的前端(虽然不使用特定于语言的填充程序可能会失败而不传递其他选项,如果它适用于全部)。
如果您的文件没有正确的扩展名,您可以通过-x
明确设置语言,例如-xc
。
但是,最好的选择是修复文件名。