gpt4 book ai didi

c++ - MSVC 中的复合文字

转载 作者:可可西里 更新时间:2023-11-01 17:19:14 24 4
gpt4 key购买 nike

在 GCC 中,我可以这样做:

(CachedPath){ino}
inode->data = (struct Data)DATA_INIT;

哪里:

struct CachedPath
{
Ino ino;
};

typedef int8_t Depth;
struct Data
{
Offset size;
Blkno root;
Depth depth;
};
#define DATA_INIT {0, -1, 0}

MSVC 为这些类型的转换给出了以下错误:

error C2143: syntax error : missing ';' before '{'

我如何在 MSVC 中执行此操作?请注意,代码已从 C99 转换而来,我为此使用了指定的初始化程序,然后以类似的方式对其进行转换。任何关于 C99 和 C++ 的 MSVC/GCC 实现之间的这些不同特性之间的关系的任何澄清都是值得赞赏的。

最佳答案

构造(Type){initialisers} 不是强制转换操作,而是复合文字 的句法构造。这是一个 C99 结构,GCC 在其 C++ 编译器中也支持它作为扩展。据我所知,复合文字在其 C 或 C++ 模式下不受支持,包括 MSVC 2012。 C 模式的支持是后来在 MSVC 2013 中引入的。在 C++ 模式下,它仍然不支持,我相信不太可能添加支持。

对于 MSVC 2012 及更早版本,此构造的替代方案是

  • 显式声明并初始化所需结构类型的临时对象,并使用它代替赋值中的复合文字
  • 与其对复合文字进行单一赋值,不如对每个单独的成员使用单独的赋值。

关于c++ - MSVC 中的复合文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3869963/

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