数组大小在运行时确定

lang2

我看到这样的一些代码:

int foo()
{
  int sz = call_other_func();
  char array[sz];

  /* whatever */
}

我对它如何工作甚至无法编译感到困惑gcc数组的大小应该是静态的,并且是在编译时确定的,不是吗?

沙菲克·雅格莫(Shafik Yaghmour)

这是有效的C99功能,称为可变长度数组VLA),如果进行编译,gcc -std=c90 -pedantic则会收到以下警告:

警告:ISO C90禁止使用可变长度数组'array'[-Wvla]

使用-std=c99 -pedantic不会产生警告,虽然两者gccclang支持VLA以外C99模式以及在C ++不允许VLA作为扩展

我们可以从C99草案标准部分的6.7.5.2 数组声明器4段中看到强调我的):

如果不存在大小,则数组类型为不完整的类型。如果size是*而不是表达式,则数组类型是未指定大小的可变长度数组类型,只能在具有函数原型作用域的声明中使用; 124)此类数组仍然是完整类型。如果大小是整数常量表达式,并且元素类型具有已知的常量大小,则数组类型不是可变长度数组类型;否则,数组类型为可变长度数组类型。

请注意,即使Visual Studio现在支持C99,它们也不支持VLA。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数组大小在运行时确定

来自分类Dev

如何创建在运行时确定大小的成员2D数组?

来自分类Dev

创建在运行时确定大小的成员2D数组

来自分类Dev

在MIPS中仅在运行时知道数组大小

来自分类Dev

在运行时修改数组大小

来自分类Dev

数组将在运行时被赋予值和大小

来自分类Dev

在运行时更改堆栈大小

来自分类Dev

在运行时更改堆栈大小

来自分类Dev

在运行时更改VideoView的大小

来自分类Dev

在运行时减小图像大小

来自分类Dev

在运行时确定大小的对象上使用std :: unique_ptr

来自分类Dev

获取 0 作为堆栈分配数组的大小,其大小在运行时给出

来自分类Dev

在运行时转换类型数组

来自分类Dev

g ++编译数组,数组大小在运行时由const值(不是constexpr)给定

来自分类Dev

是否可以在运行时设置结构内数组的大小?

来自分类Dev

我们可以在运行时检查动态数组的大小吗

来自分类Dev

在标准C中(而不是在C99中)在运行时声明数组的大小

来自分类Dev

如何在不构造对象的情况下,在运行时设置数组大小?

来自分类Dev

是否可以在运行时设置结构内数组的大小?

来自分类Dev

如何在运行时分配Netcdf fortran数组的大小?

来自分类Dev

2D数组:在运行时确定1维,在编译时确定其他维

来自分类Dev

是否可以在Rust中以运行时确定的大小分配堆栈分配的数组?

来自分类Dev

指向C99之前运行时确定大小的数组的指针

来自分类Dev

在运行时确定或访问类型变量的具体类型

来自分类Dev

Python何时无法在运行时确定对象的类型?

来自分类Dev

在运行时以编程方式确定Cassandra列

来自分类Dev

Ghostscript-在运行时确定最终替换的字体

来自分类Dev

在运行时确定操作系统?

来自分类Dev

C ++在运行时确定多态对象的类型

Related 相关文章

  1. 1

    数组大小在运行时确定

  2. 2

    如何创建在运行时确定大小的成员2D数组?

  3. 3

    创建在运行时确定大小的成员2D数组

  4. 4

    在MIPS中仅在运行时知道数组大小

  5. 5

    在运行时修改数组大小

  6. 6

    数组将在运行时被赋予值和大小

  7. 7

    在运行时更改堆栈大小

  8. 8

    在运行时更改堆栈大小

  9. 9

    在运行时更改VideoView的大小

  10. 10

    在运行时减小图像大小

  11. 11

    在运行时确定大小的对象上使用std :: unique_ptr

  12. 12

    获取 0 作为堆栈分配数组的大小,其大小在运行时给出

  13. 13

    在运行时转换类型数组

  14. 14

    g ++编译数组,数组大小在运行时由const值(不是constexpr)给定

  15. 15

    是否可以在运行时设置结构内数组的大小?

  16. 16

    我们可以在运行时检查动态数组的大小吗

  17. 17

    在标准C中(而不是在C99中)在运行时声明数组的大小

  18. 18

    如何在不构造对象的情况下,在运行时设置数组大小?

  19. 19

    是否可以在运行时设置结构内数组的大小?

  20. 20

    如何在运行时分配Netcdf fortran数组的大小?

  21. 21

    2D数组:在运行时确定1维,在编译时确定其他维

  22. 22

    是否可以在Rust中以运行时确定的大小分配堆栈分配的数组?

  23. 23

    指向C99之前运行时确定大小的数组的指针

  24. 24

    在运行时确定或访问类型变量的具体类型

  25. 25

    Python何时无法在运行时确定对象的类型?

  26. 26

    在运行时以编程方式确定Cassandra列

  27. 27

    Ghostscript-在运行时确定最终替换的字体

  28. 28

    在运行时确定操作系统?

  29. 29

    C ++在运行时确定多态对象的类型

热门标签

归档