前言
今天敲代码时发现vs无法按指定的顺序初始化结构体,而其他编译器就不会有问题,于是上网查了查,并没有找到关于这一问题的讲解,于是利用AI和部分线索最终找到了问题的原因和解决方案。
原因
在 C 语言中,直到 C99 标准之前,结构体初始化通常需要按照成员在结构体中声明的顺序来进行,这被称为“顺序初始化”。C99 引入了一种新的初始化方式,允许按照成员的名字来初始化,这被称为“指定初始化”(也称为“乱序初始化”)。这种初始化方式在 C99 标准中被引入,以提供更灵活的结构体初始化方法。
如果你在使用 Visual Studio 并且遇到了无法按指定顺序初始化结构体的问题,这可能是因为你的项目设置使用的是 C 语言标准而不是 C99 或更新的标准。在 C89/C90 标准中,这种指定初始化的方式是不支持的。
另外,如果你使用C++编译器书写c语言代码时,也有可能会出现这种状况。
解决方案
要解决这个问题,首先要确保自己使用的语言与自己使用的编译器相匹配。
在vs中,可以实现c编译器和c++编译器的切换,步骤如下:
-
在资源管理器的源文件一栏找到要切换的文件,右键,点击属性。
-
找到“高级”,”编译为“,更改成c或者c++就可以了
如果更改后仍然没有解决问题,可能是因为默认的编译器版本太低,可以在语言中修改。