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 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

函数声明后面的const用法

void function() const{} 通常我们会看到一些函数声明后面会跟着一个const,这个const是做什么的呢? 看一下下面的例子,就知道了。直...

21450
来自专栏海天一树

NOIP 2018普及组复赛第1题答案详解

本题考察的知识点有两个: (1)输入带空格的字符串 常用的scanf和cin,遇到第一个空格就会停止输入。 C语言可以使用gets()输入带空格的字符串。当然使...

42450
来自专栏nummy

exports与module.exports的区别

当node加载模块的时候,使用exports, require, module,__filename以及 __dirname作为参数。

7820
来自专栏决胜机器学习

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

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

30960
来自专栏西枫里博客

Python学习笔记九(变量作用域及内置函数和闭包函数)

在上次的学习中,初步认识了Python的自定义函数方式及变量参数。那么编程中的局部变量和全局变量应该是大多数语言的标配。Python中如果定义局部变量和全局变量...

8720
来自专栏令仔很忙

理解javascript作用域和作用域链

作用域就是变量和函数的可访问范围,控制着变量和函数的可见性与生命周期,在JavaScript中变量的作用域有全局作用域和局部作用域。

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

二维变长数组

15550
来自专栏白驹过隙

Redis - set类型操作

400130
来自专栏linux运维学习

linux学习第六十五篇:for循环,while循环, break跳出循环,continue结束本次循环

for循环 语法:for 变量名 in 条件; do …; done for循环会以空格作为分隔符 案例1 #!/bin/bash sum=0 for i ...

298100
来自专栏爱撒谎的男孩

Spring依赖注入

45470

扫码关注云+社区

领取腾讯云代金券