C语言C99标准中的变长数组(VLA)

长期以来,我都很自然的认为定义和声明数组时,数组大小必须是一个常量表达式,因为刚学编程的时候在这个上面翻过好多次语法错误。那个时候大致会写如下的代码:

image.png

这段代码在VC 6中是编译不过的。

但今天有了解到,在C语言的C99标准中,是可以有变长数组的,即可以存在Arrays of Variable Length,也就是说,上面的代码在支持C99的编译器中是合法的。

但在GNU C下有点小特殊,使用gcc -std=c89编译上述代码,发现也是OK的!原来,变长数组在c89中是作为GNU C的一个扩展存在的。具体可以参考gcc的手册:http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的Python和你

Python数据分析之groupby语法糖对分组进行迭代语法糖一:选取一个或多个列

1124
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(十) ——Redis对象相关其他设计与实现

《Redis设计与实现》读书笔记(十) ——Redis对象相关其他设计与实现 (原创内容,转载请注明来源,谢谢) 一、类型检查与命令多态 redis对键操作的命...

2856
来自专栏mySoul

Java静态方法和实例方法 java中的数组作为形参传入

启动一个Java程序的时候,会诞生一个虚拟机实例,当程序关闭退出时,该实例会消失。

931
来自专栏Golang语言社区

Golang语言的函数调用信息

函数的调用信息是程序中比较重要运行期信息, 在很多场合都会用到(比如调试或日志). Go语言 runtime 包的 runtime.Caller / runti...

4876
来自专栏java相关

Shell脚本编程

linux中的变量分为环境变量和普通变量,其中环境变量可以理解为全局变量,在所有shell的子程序中都可以引用,普通变量只能在自己的shell程序中使用,程序结...

1772
来自专栏华仔的技术笔记

回顾retain,copy,assign

3398
来自专栏程序员互动联盟

【编程基础第十一讲】代码如何写才最漂亮第一篇

存在问题: 好多小伙伴对编码的格式作用模糊,以为只要完成功能就行,其实这种观点是错误的,一定要重视代码规范,不然你哭的地都找不到。 如何实施: 良好的代码开发习...

2687
来自专栏白驹过隙

Redis - set类型操作

35513
来自专栏炉边夜话

GCC内嵌汇编语言

绝大多数 Linux 程序员以前只接触过DOS/Windows 下的汇编语言,这些汇编代码都是 Intel 风格的。但在 Unix 和 Linux 系统中,更多...

2092
来自专栏我是业余自学C/C++的

二维变长数组

1195

扫码关注云+社区