【发布时间】:2016-01-02 01:29:53
【问题描述】:
我正在尝试使用
编译下面的代码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: 错误:在 ']' 标记之前使用函数体外部的参数 无效函数(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;
}
【问题讨论】:
-
如果文件不是 C++,你为什么将它命名为
main.cpp?还是这样? -
您从帖子中删除的评论与此非常相关——这是我的 IDE 中的默认设置。
-
@ABD:因为“...但不适用于 C++”很清楚,警告是由程序
cc1plus产生的,此外 C++ 没有根本不允许 VLA。 -
@ABD:gcc 的行为会根据您传递给它的内容而有所不同。默认情况下,如果您将
.cpp文件传递给它,它会将其编译为 C++,无论您是以gcc还是g++调用它。 -
gcc是 Gnu 编译器 Collection 并且可以充当不仅仅是 C 的前端。如果您的文件没有正确的扩展名,请传递 @987654328 @强制C模式