前言:
个人编写的C语言和文章都是以vs2022编译环境的基础来做的,这次我想讲的是关于在vs2022中关于变长数组的一些问题
1.在vs2022中无法使用的原因:
vs2022中默认是使用msvc编译器,在创建数组时在行列中使用变量替代常量时会出现如下报错
int main()
{
int a=0;
int arr[a];
return 0;
}
这是因为是C99给变长数组一个新特性,允许我们使用变量指定数组大小,但msvc编译器中暂不支持这个效果,所以会报错无法使用。那有没有什么办法解决呢?当然是有的,且看下文
2.vs2022中无法使用变长数组的解决方法
vs2022中使用clang的方法
既然默认的msvc编译器不支持,那还不简单,直接换个编译器嘛。对此我们有两个方式,分别是gcc编译器和苹果的clang,这两个编译器都支持C99中的变长数组中变量的使用。首先先讲如何在vs2022中使用clang。
首先如图所示先打开win窗口,在其中输入installer,只要你有下载安装vs2022,默认都会有这个的,打开它,且等他加载一下。
进来之后就是这个界面,随后点击其中的修改键,
随后进来之后在右边的安装详细信息中往下翻,找到适用于windows的C++Clang工具并勾选上。默认一开始安装vs2022时是不会勾选上的,勾选上后点击右下角的修改键后等待下载安装即可。但是很快你会发现即使你已经安装了,但为什么还是会报错呢,其实是因为你还没有调用clang编译器来进行编译,这需要我们手动去选择。步骤如下:
随后你就能够发现可以使用变长数组了。上面示例中,数组arr就是变长数组,因为它的长度取决于变量a的值,编译器没法事先确定,只有运行时才能知道a是多少。变长数组的根本特征,就是数组长度只有运行时才能确定,所以变长数组不能初始化。它的好处是程序员不必在开发时,随意为数组指定一个估计的长度,程序可以在运行时为数组分配精确的长度。有一个比较迷惑的点,变长数组的意思是数组的大小是可以使用变量来指定的,在程序运行的时候,根据变量的大小来指定数组的元素个数,而不是说数组的大小是可变的。数组的大小一旦确定就不能再变化了。遗憾的是在VS2022上,虽然支持大部分C99的语法,没有支持C99中的变长数组,没法测试;下面是我在gcc编译器上测试。
vscode中的演示
这个就是在vscode中gcc环境下编译的程序,这里不过多解释,因为vscode使用相对复杂,就不过多赘述,但看得出来其中变长数组是能够使用的,并没有报错,也能体现其中变量的使用,同样的这串代码在vs2022的clang环境中同样可以运行。小伙伴可以自行去试一试哦。
这次的内容大概就这个,小小的解释一下变长数组的使用。那么下次再会啦。