【发布时间】: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 支持,代码也应该可用(但可能没有那么快)。