在Eclipse中无法识别c++ GNU指定的结构初始化

C++ GNU designated structure initialization not recognized in Eclipse

本文关键字:结构 初始化 GNU c++ Eclipse 识别      更新时间:2023-10-16

CDT解析器报告结构初始化的语法错误:

typedef struct MyStruct
{
    int a;
    float b;
};
int main( void )
{
    // GNU C extension format
    MyStruct s = {a : 1, b : 2};
    // C99 standard format
//    MyStruct s = {.a = 1, .b = 2};
    return 0;
}

虽然GCC将:形式列为过时的,但它似乎没有被弃用或删除。在C99中,我当然会使用标准的.<name> =形式,但对于c++, :是我所知道的用于指定初始化的唯一选项。

我已经尝试将我的工具链设置为MinGW和Cross GCC,但似乎都不起作用。

如何让Eclipse识别这个语法?对于一行来说,这不是什么大问题,但它会传递到变量的所有其他实例,因为Eclipse没有意识到它已被声明。

.形式仅在C99中可用,而在任何风格的c++中都没有。在c++中,唯一与标准兼容的选项是有序初始化或构造函数。

可以使用链接和适当的引用返回方法来创建类似的接口(这里a和b是方法而不是变量):

MyStruct s;
s.a(1).b(2);

我也遇到过这样的问题,我用下面的方法来解决。

MyStruct s = {
 1,
 2,
}

这要求程序员确保初始化的顺序。