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 lists the :
form as obsolete ,它似乎没有被弃用或删除。在 C99 中我肯定会使用标准 .<name> =
形式,但对于 C++,:
是我所知道的用于指定初始化的唯一选项。
我已经尝试将我的工具链设置为 MinGW 和 Cross GCC,但似乎都不起作用。
如何让 Eclipse 识别这种语法?这对一行来说没什么大不了的,但它会传递到变量的每个其他实例,因为 Eclipse 没有意识到它已被声明。
最佳答案
.
形式仅在 C99 中可用,在任何 C++ 风格中均不可用。在 C++ 中,唯一符合标准的选项是有序初始化或构造函数。
您可以使用链接和适当的引用返回方法来创建类似的接口(interface)(这里 a 和 b 是方法而不是变量):
MyStruct s;
s.a(1).b(2);
关于C++ GNU 指定的结构初始化在 Eclipse 中无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14325129/