【发布时间】:2012-08-17 00:41:24
【问题描述】:
在阅读 Clang 文档时,我发现了以下有趣的花絮:[1]
clang 不支持允许在结构中使用可变长度数组的 gcc 扩展。这有几个原因:第一,实现起来很棘手,第二,扩展完全没有文档记录,第三,扩展似乎很少使用。请注意,clang 确实支持灵活的数组成员(在结构末尾具有零或未指定大小的数组)。
如何使用此扩展程序?我的理解是,在构造函数中使用 alloca 会导致堆栈指针在调用函数的末尾恢复,在这种情况下,调用函数将是构造函数——而不是在封闭结构的末尾。
感谢您的帮助!
【问题讨论】:
-
这是奇怪的。 ideone.com/qnghE
-
@forever 不,这是 C99 灵活数组成员的示例。
-
@Rob_{\psi} 嗯,我希望能够在函数范围之外使用扩展(例如在分配器中),以便封闭结构实际上可以拥有指向资源。如果这是可以使用扩展的唯一方法,它有点粉碎我的野心=(
-
@user315052,C 也不支持 VLA 作为结构成员,那么 C 的语义是什么? C 支持不一样的“灵活数组成员”(6.7.2.1)。
标签: c++ memory gcc g++ variable-length-array