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

标签 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: warning: command line option '-std=c99' is valid for C/ObjC but not for C++

main.cpp:11:35: error: use of parameter outside function body before ']' token void func(int a, int b, int arry[a][b]){ ^

main.cpp:11:38: error: use of parameter outside function body before ']' token 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;
}

最佳答案

gcc 是 Gnu Compiler Collection 并且可以充当更多 C 的前端(尽管不使用特定语言的 shim 可能会失败,如果不传递额外的选项,如果它完全有效)。

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

但是,更可取的选择是修复文件名。

关于c - 为什么 "gcc-std=c99 ...."不允许我使用 VLA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561723/

相关文章:

c++ - 确保 fsync 完成其工作

c - c中int**函数的返回

java - 将整数数组(java)存储到MySQL数据库的好方法是什么

c - C语言中的字符串会发生什么变化?

c++ - Thread Sanitizer - 如何解释读取与先前写入警告

c - 使用C识别文件中的换行符

c:检查 main.c 中是否从外部文件定义了函数

c - 使用指针为结构赋值时出错

c++ - _mm_max_ss 在 clang 和 gcc 之间有不同的行为

C++程序深奥地卡住