Microsoft C 编译器是否允许可变大小的数组?

Does Microsoft C compiler allow variable sized arrays?

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 但它没有帮助。还有其他解决方案吗?

p.s.
为什么我需要使用 Microsoft 编译器?因为我需要构建一个Windows Audio Processing Object(APO),而上面的代码是需要与APO链接的静态库的一部分。

Does Microsoft C compiler allow variable sized arrays?

没有。根据 Microsoft C - ANSI Conformance,他们的编译器符合 ANSI C 标准 9899:1990 版中规定的 C 语言标准。此版本不包含 VLA:s.

Is there a way to relax Microsoft C compiler permissiveness?

不是任性。 VLA:s 根本没有在他们的编译器中实现。

Any other solution?

要获得类似的行为(堆栈分配和在函数 returns 时自动释放内存),您可以使用已弃用的 _alloca 函数。

int function(const char *p)
{
    const int str_size = strlen(p);
    char* parameter = (char*) _alloca(str_size);
    ...
}

注意:如果space无法分配,则会产生堆栈溢出异常。堆栈溢出异常不是 C++ 异常;这是一个结构化异常。