【发布时间】: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