【发布时间】:2021-04-06 21:32:58
【问题描述】:
int function(const char *p)
{
const int str_size = strlen(p);
char parameter[str_size];
...
}
上面使用Microsoft Visual Studio 2019 C编译器编译的代码报错:
Error E0028 expression must have a constant value
Error C2057 expected constant expression
Error C2466 cannot allocate an array of constant size 0
Error C2133 'parameter': unknown size
我已经成功地使用 GCC 和 Clang 编译了相同的代码。
有没有办法放宽 Microsoft C 编译器的许可?我试过/permissive
但这没有帮助。还有其他解决方案吗?
附言
为什么我需要使用微软编译器?因为我需要构建一个WindowsAudio Processing Object(APO),而上面的代码是需要与APO链接的静态库的一部分。
【问题讨论】:
-
不,MSVC 不支持 VLA。
-
@Danijel 据我所知,MS VS C++/C 不支持可变长度数组。如果您将程序编译为 C++ 程序,请使用 std::vector。
-
您已经标记了
[c]和[c++]。它们是不同的语言。您应该在此处详细说明您打算使用哪一个。 -
From devblogs at MS ,总之不要屏住呼吸;它不存在,也无意存在。
-
@AndrewHenle 他们花了 永远 来支持
stdint.h和inttypes.h。在过去 5 年多的时间里,他们对 C 合规性的兴趣实际上变得更好,尽管从字面上所有其他工具链的任何衡量标准来看,他们仍在以蜗牛的速度前进。这本身就是一个指标,表明它在如此长的一段时间内腐烂得有多严重。
标签: c visual-studio gcc clang