MSVC中的复合文字

Mat*_*ner 8 c c++ gcc struct visual-studio-2010

在海湾合作委员会,我能够做到这一点:

(CachedPath){ino}
inode->data = (struct Data)DATA_INIT;
Run Code Online (Sandbox Code Playgroud)

哪里:

struct CachedPath
{
    Ino ino;
};

typedef int8_t Depth;
struct Data
{
    Offset size;
    Blkno root;
    Depth depth;
};
#define DATA_INIT {0, -1, 0}
Run Code Online (Sandbox Code Playgroud)

MSVC为这些类型的转换提供以下错误:

error C2143: syntax error : missing ';' before '{'
Run Code Online (Sandbox Code Playgroud)

我怎样才能在MSVC中这样做?进一步注意,代码已经从C99转换而来,我为此使用了指定的初始值设定项,然后进行类似的转换.关于C99与C++的MSVC/GCC实现之间如何关联这些各种特征的任何清晰都是值得赞赏的.

Bar*_*nau 12

构造(Type){initialisers}不是强制转换操作,但它是复合文字的句法结构.这是一个C99构造,GCC在其C++编译器中也支持它作为扩展.据我所知,MSVC在C或C++模式下都不支持复合文字.

这种结构的替代方案是

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