You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C与C++未知边界多维数组参数的差异及编译兼容问询

C变长数组(VLA)在C++编译中的兼容办法

问题场景

以下C代码可通过GCC正常编译:

#include <stdlib.h>
#include <stdio.h>

void f(int n, int m, int x[n][m]) {
  printf("x[0][2] = %i\n",x[0][2]);
}

int main() {
  int v[][3] = { {0,1,2}, {3,4,5} };

  f(2,3,v);
}

但使用G++编译时会报错:

main.c:4:29: error: use of parameter outside function body before ‘]’ token
 void f(int n, int m, int x[n][m]) {
                             ^

这段代码用到了C99引入的**变长数组(VLA)**特性,该特性不属于C标准,因此默认无法被G接受。

解决办法

GCC提供了扩展选项来支持这类C特性在C++中的编译,有两种可行方式:

  • 使用-fpermissive编译选项:该选项会放宽C++的语法检查规则,允许部分不符合标准但符合GNU扩展的代码通过编译
    g++ -fpermissive main.c
    
  • 指定GNU系的C++标准版本(如gnu++11、gnu++17等):这类标准默认启用了包括变长数组在内的GCC扩展特性
    g++ -std=gnu++11 main.c
    

内容的提问来源于stack exchange,提问作者Bérenger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:40:23