有一些使用VLA(可变长度数组)的奇怪代码,由gcc 4.6被视为有效C(C99,C11):

$ cat a.c

int main(int argc,char**argv)

{

struct args_t{

int a;

int params[argc]; // << Wat?

// VLA in the middle of some struct, between other fields

int b;

} args;

args.b=0;

for(args.a=0;args.a

{

args.params[args.a]=argv[0][0];

args.b++;

}

return args.b;

}

这段代码编译没有警告:

$ gcc-4.6 -Wall -std=c99 a.c && echo $?

0

$ ./a.out ; echo $?

1

$ ./a.out 2; echo $?

2

$ ./a.out 2 3; echo $?

3

与-std = c1x相同​​:

$ gcc-4.6 -Wall -std=c1x a.c && echo $?

0

但是这不适用于Intel C Compiler或Clang LLVM:

$ icc a.c -o a.icc

a.c(5): warning #1361: variable-length array field type will be treated as zero-length array field type

int params[argc];

^

$ ./a.icc; echo $?

47

$ clang a.c -o a.clang

a.c:5:10: error: fields must have a constant size: 'variable length array in structure' extension will never be supported

int params[argc];

^

1 error generated.

所以:

>为什么这被GCC认为是有效的?

>如果它是GCC的扩展,它在哪里描述?

>是否在C99和C11 ISO标准中有效?

c语言程序中间改变数组大小,结构中间的可变长度数组 – 为什么这个C代码对gcc有效...相关推荐

  1. c 语言程序的三种基本结构,C 语言程序的三种基本结构是____ A、顺序结构,选择结构,循环结构 B、递归结构,循环结构,转移结构...

    C 语言程序的三种基本结构是____ A.顺序结构,选择结构,循环结构 B.递归结构,循环结构,转移结构 更多相关问题 [填空题]移动电商,全称 ,是以 为载体的电商模式. [单选题]有关离子选择性电 ...

  2. R语言ggplot2可视化改变字体大小实战:单个图片设置字体大小、全局设置字体大小

    R语言ggplot2可视化改变字体大小实战:单个图片设置字体大小.全局设置字体大小 目录

  3. java数组大小不固定_Java的数组长度为什么不能改变?

    Java中的数组是定长的!你这样int[] a ={}; 定义出来的数组a 长度为0,已经是定长了,之后再给它赋值是不可以的,因为它的长度定义出来之后是不可改变的了.所以在使用数组的时候,一定要注意长 ...

  4. go语言json字符串解析为结构体数组,结构体指针的数组

    废话不多说直接上效果图 完整代码如下 package main import ("encoding/json""fmt" ) // 结构体定义 type rob ...

  5. 微信小程序tabBar改变图片大小方法

    1.最少用,但是最简单,用原生tabBar用ps改变图片大小 2.用原生提供的custom-tab-bar(可能会存在一些小问题,比如switchTab的跳转之类的) 3.自定义组件,把所有页面变成子 ...

  6. matlab单元数组和结构,Matlab使用单元数组和结构数组

    Matlab使用字符串数组.单元数组(cell array)和结构数组 (struct array) 要在MALTAB中实现比较复杂的编程,就不能不用单元数组(cell array)和结构数组(str ...

  7. matlab单元数组和结构,Matlab中单元数组和结构数组

    前言: 单元数组和结构数组是一种新的数据类型,能将不同类型.不同维数的数组组合在一起,从而方便对不同的数据类型方便管理和维护. 如上图所示的2*2矩阵中,分别存储着四种不同的数据类型,分别为数组.字符 ...

  8. linux c99 可变长数组,C中不支持可变长度数组C99(Variable length arrays C99 not supported in C)...

    C中不支持可变长度数组C99(Variable length arrays C99 not supported in C) 在Visual Studio 2005中,我正在尝试编译.c文件: int ...

  9. C语言程序练习- L1-010 比较大小 (10分)

    L1-010 比较大小 (10分) 本题要求将输入的任意3个整数从小到大输出. 输入格式: 输入在一行中给出3个整数,其间以空格分隔. 输出格式: 在一行中将3个整数从小到大输出,其间以"- ...

最新文章

  1. JavaScript初学者编程题(17)
  2. java基础(十)-----Java 序列化的高级认识
  3. 3D 三角形的前面和后面
  4. 统计和生成所有不同的二叉树
  5. 【C++】40. std::array与int a[]方式创建数组的区别
  6. UBUNTU804VirtualBox出现常见问题解决(转高手的)我转的CU的
  7. zabbix 监控配置1
  8. 非对称加密 公钥私钥_选择Java加密算法第3部分–公钥/私钥非对称加密
  9. websocket中发生数据丢失_获取使用关闭代码1006关闭websocket的原因
  10. 2020 年诺贝尔生理奖授予丙肝病毒的3 位发现者
  11. 构造函数_析构函数_深拷贝与浅拷贝
  12. 创建对象时引用的关键字,assign,copy,retain
  13. 【2019杭电多校第五场1007=HDU6630】permutation 2(打表找规律+分情况讨论)
  14. 【python】批量替换文本中的某部分内容
  15. 计算机开机桌面文件丢失怎么办,电脑重启桌面文件丢失怎么办
  16. pentaho java代码_将Pentaho移植到Eclipse_ee里运行
  17. 小型土路肩摊铺机施工步骤与工作原理的特点
  18. java计算机毕业设计基于springboot+vue+elementUI的旅游网站(源码+数据库+Lw文档)
  19. c语言 标准多线程库,关于C语言多线程pthread库的功能描述
  20. GDUT_排位赛题解报告_第5场_A. 唯一排列

热门文章

  1. android 查看内存中庸,nubia布拉格S评测:颜值突出性能中庸
  2. weblogic学习教程(一)
  3. 软件测试基础之你的测试覆盖率是多少?
  4. ymodem android,【安卓相关】蓝牙基于Ymodem协议发送bin文件,对硬件设备进行升级。...
  5. 颐和园游记(来了可别错过)
  6. 戴尔显示器上的耳机口,能收麦克风的音嘛?
  7. 解析计算机体系结构中的MACs实现
  8. CEBR-160L-T17A、CEBR-320L-T19A螺纹插式比例减压阀放大器
  9. OkHttpUtils 加载Cooki 验证码失败
  10. Android社区物业便民服务小区APP毕业设计