【问题标题】:Variable list array initialization in C explained [duplicate]C中的变量列表数组初始化解释[重复]
【发布时间】:2016-09-14 16:10:54
【问题描述】:

给出一组基本的C代码:

int a = 5;
int b[a] = {1,2,3,4,5};

为什么会产生这个错误?

$gcc -o demo demo.c
error: variable-sized object may not be initialized

我知道这是一件坏事,编译器不会让你这样做。 然而,作为一名教师,我很难解释为什么你不能也不应该这样做。

(假设 C99)

你会如何解释这里发生了什么?

【问题讨论】:

  • 因为变量就是变量——它们可以在程序中随时改变。
  • @CinCout C 支持 VLA。但不支持使用大括号初始化列表初始化此类数组。
  • @MohitJain,是的。但为什么呢?
  • 你不知道元素的数量,你将如何准备初始化列表。如果您在编译时知道,则不需要 VLA 功能。规则记录在第 6.7.8/3 节中。
  • 您是否要求 C 语言的 design rationale

标签: c


【解决方案1】:

为什么会产生这个错误?

C 标准不允许这样做。不能使用大括号括起来的初始化器列表来初始化可变长度数组。

标准说:
C11-§6.7.9/3:

要初始化的实体的类型应该是一个未知大小的数组或一个完整的对象类型,而不是可变长度数组类型。

【讨论】:

  • 但是为什么呢?是否有记录的原因?
猜你喜欢
  • 2018-03-01
  • 2013-02-22
  • 1970-01-01
  • 2015-05-27
  • 2015-01-28
  • 2018-06-26
  • 2011-05-22
  • 2014-04-21
  • 2023-03-13
相关资源
最近更新 更多