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

C++中以变量cols为长度的int (*arr)[cols]为何能正常运行?

为什么不支持VLA的C++能编译运行你提供的代码?

核心原因有两点:

  • 你使用的GCC编译器为C++提供了VLA的非官方扩展支持
    C官方标准确实从未纳入可变长度数组(VLA)特性,这一特性原本是C99标准新增、C11改为可选的C专属特性。但GCC、Clang这类编译器为了兼容C代码、扩展使用场景,主动给C也实现了VLA的支持,你代码里用变量cols定义数组指针长度int (*arr)[cols]的写法,就是GCC扩展支持的语法。
  • 你没有开启严格的C++标准合规检查
    你编译时只加了-std=c++11参数,这个参数只会指定使用C11的基础特性,不会禁用GCC自己加的各种扩展功能。如果你编译时加上-pedantic参数开启严格标准检查,GCC就会弹出「ISO C不支持可变长度数组」的警告,加上-pedantic-errors参数的话会直接把这个用法判定为编译错误。

额外提醒:这种依赖编译器扩展的代码没有可移植性,换到不支持VLA扩展的编译器(比如MSVC)上完全无法编译。如果要写符合C标准的动态二维数组,更推荐用std::vector<std::vector<int>>、一维数组手动计算下标偏移、或者C20的std::span等方案。

内容的提问来源于stack exchange,提问作者rustyhu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:48:02