Answers:
我听到过一些传说,从“它应该是可选的,因为某些小型编译器应该能够在不使用VLA的情况下符合C11”到“首先是一个错误”。不过,我对此还没有一个确定的答案。最终,我不相信任何人真的有一个理由(假设-并希望-有一个)从未被披露(就我以前的搜索而言)。
摘自《国际标准原理-编程语言-C 5.10(2003)》的第4章(第13页)。
通过根据接受的程序定义一致的实现,该标准为一致实现的一部分打开了广泛的扩展之门。通过定义一致的托管实现和一致的独立实现,标准认识到使用C编写诸如操作系统和基于ROM的应用程序以及更常规的托管应用程序之类的程序。除了这两个级别的方案之外,没有为C定义任何其他子集,因为C89委员会强烈认为过多的级别会削弱标准的有效性。
强调我的。请注意,此决定违背了自己的理由。然而,另一件事成为可选的。现在,您将获得__STDC_NO_VLA__
VLA支持。这是一个非常奇怪的决定。
据我从公共委员会的文件(尤其是N1395)中可以确定的,使VLA(以及复杂的算术和线程)成为可选项的主要原因之一是可以为小型嵌入式处理器创建符合标准的C编译器。
趋势是,针对嵌入式系统的编译器供应商一直遵循C90标准,因为引入了客户不需要的那些大功能。