gpt4 book ai didi

c++ - 如何在 Visual C++ 2008 中就地构建转换为数组编译的结构?

转载 作者:行者123 更新时间:2023-11-28 03:57:59 25 4
gpt4 key购买 nike

我正在使用相当大的代码库,它在 linux 中编译得很好,但 vc++ 2008 会出现错误。

问题代码如下:

声明:
typedef float vec_t;
typedef vec_t vec2_t[2];

代码库中到处都是这样的就地构造:
(vec2_t){0, div}

或者更复杂:
(vec2_t){ 1/(float)Vid_GetScreenW(), 1/(float)Vid_GetScreenH()}

据我所知,这段代码构造了一个结构体,然后将其转换为数组并将地址传递给函数。我个人从来没有使用过这样的就地施工,所以我不知道如何让它发挥作用。

编译器会产生一堆语法错误,如下所示:
错误 2 错误 C2143:语法错误:在“{”之前缺少“)”
错误 3 错误 C2059:语法错误:')'
错误 4 错误 C2143:语法错误:缺少“;”在“{”之前

我不维护 linux 版本,只维护 windows 版本。而且我无法编译它。是否有一些开关,一些宏可以让 vc++ 编译它?

也许有一种类似的巧妙方法来构造这些数组并将它们传递给在 vc++ 中编译得很好的就地函数?

最佳答案

您正在使用 MSVC 根本不支持的 GCC 扩展,"compound literals" ,在旧版 GCC 文档中也称为“构造函数表达式”。

如果你想要可移植的代码,我认为你需要更改代码以正常声明结构并使用具有常量表达式或使用标准赋值的初始化器初始化它们(或者使用像 MinGW 这样的东西作为你的 Windows 编译器,如果会成功的)。

关于c++ - 如何在 Visual C++ 2008 中就地构建转换为数组编译的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2619659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com