gpt4 book ai didi

c - 如果编译器定义了 __STDC_NO_VLA__,它是否还必须支持灵活的数组成员?

转载 作者:行者123 更新时间:2023-12-04 10:11:50 24 4
gpt4 key购买 nike

在 C99 中,(结构的)灵活数组成员和可变长度数组是标准的强制性部分——符合 C99 的编译器(实现)必须同时支持它们。

在 C11 中,允许实现定义( §6.10.8.3 Conditional feature macros ):

__STDC_NO_VLA__ The integer constant 1, intended to indicate that the implementation does not support variable length arrays or variably modified types.


  • 该定义是否意味着指定不支持 VLA 的编译器也被允许不支持 §6.7.2.1 ¶3 flexible array members要么——要么是 §6.7.2.1 ¶18 flexible array members即使没有 VLA 支持也是强制性的吗?

  • 我没有在标准中发现任何地方规定带有 FAM 的结构是可变修改类型,所以我认为即使不支持 VLA,也需要 C11 编译器来支持 FAM。支持这种解释的一项是:具有 FAM 的结构的大小是固定的; FAM 不计为大小的一部分(而 VLA 的大小不是编译时常量)。

    最佳答案

    好吧,为了澄清一下,标准并没有说 FAM 是可选的,所以 FAM 不是可选的。

    然而,更进一步,标准委员会似乎不太可能愿意接受不支持 FAM 的实现。与 VLA 相比,添加对灵活数组的支持是微不足道的——稍微调整解析器,允许结构的最后一个成员是大小为零的数组,然后收工。 VLA 需要更复杂的静态分析,并且在一些小型独立架构中可能难以实现或无法实现。

    关于c - 如果编译器定义了 __STDC_NO_VLA__,它是否还必须支持灵活的数组成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51124632/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com