【问题标题】:Check support for variable length array in C检查 C 中对可变长度数组的支持
【发布时间】:2018-10-03 22:31:05
【问题描述】:

是否有标准宏来检查 C 代码中对可变长度数组的支持?在所有广泛使用的编译器中检查 c99 (__STDC_VERSION__ >= 199901L) 就足够了吗?

【问题讨论】:

  • 由于您已经标记了 C99,如果您的编译器符合 C99,则保证您拥有 VLA。
  • 最好不要使用它们。
  • 不兼容的 MSVC 不需要宏。它无法编译。
  • 当 VLA 成为可选时,您只需要 C11 中的宏。因此,正如@i486 所说,它们不是标准的——不要使用它们。
  • @abelenky:在某些情况下,可以编写在有或没有 VLA 支持的情况下工作的代码。例如使用int foo[x];int *foo = malloc(x * sizeof (int));(稍后释放存储空间),这取决于VLA 支持是否存在。如果存在 VLA 支持,并且程序员愿意冒堆栈溢出的风险,则 VLA 方法可能更快,但即使没有 VLA 支持,代码也应该可用(但可能没有那么快)。

标签: c arrays c99


【解决方案1】:

来自 C11 规范 §6.10.8.3

以下宏名称由 实施:
[...]

__STDC_NO_VLA__整数常量1,意在表示实现不支持变长数组或变长 修改类型。

所以如果__STDC_VERSION__ > 201000L你需要检查__STDC_NO_VLA__

否则,如果__STDC_VERSION__ >= 199901L VLA 应该可以工作,但如果编译器不兼容,则会出现编译时错误。

【讨论】:

  • 谢谢。它看起来像我一直在寻找的东西。我会检查的。
猜你喜欢
  • 2011-12-13
  • 2012-01-25
  • 2021-07-11
  • 2018-06-27
  • 1970-01-01
  • 2018-12-16
  • 2015-11-07
  • 2012-12-14
相关资源
最近更新 更多