如何将 Visual Studio 用作具有可变长度数组 (VLA) 的 IDE?

How to use Visual Studio as an IDE with variable length array(VLA) working?

在任何普通的 C 或 C++ 编译器中,可变长度数组都可以正常工作,但在 Visual Studio Community 2019 中,VLA 无法正常工作。我怎么能以任何方式将 Visual Studio 用作 IDE(因为我喜欢它的特性)并且在 C 和 C++ 中仍然有 VLA

我试图改变它使用的编译器。我试图找到 migwin 编译器,但找不到。所有在线教程都与我在 Visual Studio 2019.

最新版本中看到的不同
int n;
cin>>n;
int arr[n]; // This line gives an error

int arr[n]; //这条线应该在Visual Studio 2019年有效。没关系 它使用什么编译器。只是我需要让这个东西在 VS Community 2019 中工作 因为我想将它用作 IDE.

这个答案是关于 C++ 的。

可变长度数组不是 ISO C++ 标准,一些编译器接受它作为扩展。 例如gcc

Variable-length automatic arrays are allowed in ISO C99, and as an extension GCC accepts them in C90 mode and in C++.


编辑

这样的扩展仍然可以是 conforming 实现,只要它不改变格式良好的程序的行为。


如果您使用 VLA,那么您的代码不可移植,因为其他编译器可能有也可能没有这样的扩展,而现在有的编译器可以在供应商决定放弃支持时随时停止工作。

如果您不知道编译时的大小并且想使用 C++,那么请使用 std::vector。您只需将代码更改为:

int n;
cin>>n;
vector<int> arr(n);

但是,如果您仍然需要 VLA,这里有一个支持它的编译器列表: Live on godbolt(带绿色标记的编译器支持)

MSVC 不在列表中。所以你可以在你的 VS 中使用 clang。这里有一个tutorial。 或者更简单的是,您可以在 VS2019:

上使用开箱即用的支持

On Windows, it’s easy to install the Clang tools. Just grab the “Clang compiler for Windows,” an optional component of the “Desktop development with C++” workload. This will install everything you need to develop with Clang on Windows.

In any normal compiler for C or C++, variable length arrays are working normally

根据我对那句话的解读,它要么是同义反复,要么是荒谬的。是的,正常的事情正常工作,但 C++ 中的 VLA 数组 "work" 仅在它们不是由语言定义的意义上。

VLAs是由C定义的,已经有20年了。而且,是的,许多 C 编译器——但不是 C++ 编译器——都支持它们。一个明显的例外是微软的编译器,它没有。它不符合 C99 标准(更不用说 C11、C14 或 C17 了)。你可以说他们有点落后了。他们的立场似乎是,他们将在 C++ 编译器的上下文中实现尽可能多的 C 语言。 C 的那些不属于 C++ 的部分不符合条件。

很明显:保持 C 编译器最新不是 Microsoft 的优先事项。

Just I need to make this thing work in VS Community 2019 because i want to use it as an IDE.

事情的简单真相是,如果您想在现代 C 中工作,则不能使用 Microsoft 的编译器。您也许能够弄清楚如何配置 IDE 以使用 GNU 编译器。但是,在某些时候,您可能会开始问是否值得花时间与一个对您的目标如此敌对的系统作斗争。

VLA 可用于 "CMake Project" C++ 应用程序。创建一个新的 "CMake Project" 而不是 "Console Application",然后转到左上角菜单中的项目和 select 最后一个选项(项目名称的 CMake 设置)。它将打开一个 json 文件。在“工具集”选项下,单击下拉菜单 select Clang。

VS2019 16.1以上,Clang已经可用。如果不可用,请单击 "Modify" VS2019 在 Visual Studio 安装程序和 C/C++ 开发工具中,select "Clang tools for windows"。这将安装 Clang。

所以最主要的是 select "CMake Project" 而不是 "Console Application" 这通常不会在任何说明中显示。 VLA 现在将在 .cpp 文件中工作,Visual Studio 2019 可用作 IDE VLA 支持。

https://devblogs.microsoft.com/cppblog/clang-llvm-support-in-visual-studio/