我想知道是否可以在ANSI C中声明匿名结构。我拥有的代码是:
struct A
{
int x;
};
struct B
{
struct A;
int y;
};
当我编译它时,我得到:警告:声明未声明任何内容
我已经读过该标志-fms-extensions
可以达到目的,但是它只能在Windows系统上运行,因为它会产生:警告:匿名结构是Microsoft扩展[-Wmicrosoft]
有没有可以使用的ANSI等效扩展名?
在ANSI C中获得此功能的一个技巧是使用适当的宏:
struct A {
int x;
};
struct B {
struct A A_;
int y;
};
#define bx A_.x
那你就可以做
struct B foo, *bar;
foo.bx;
bar->bx;
但是在C11中,支持匿名结构,您只需
struct B {
struct {
int x;
};
int y;
}
但可惜不是
struct A {
int x;
};
struct B
{
struct A;
int y;
};
由于必须在匿名结构内部声明匿名结构。
有关C11中匿名成员的更多详细信息,请参见此答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句