I saw this way https://stackoverflow.com/a/14523823/108802实施某种struct
匿名继承struct
在C11中,想尝试一下。这是我所拥有的:
struct struct_a {
int aa;
};
struct struct_b {
struct struct_a;
int bb;
};
int main(void)
{
volatile struct struct_b my_b;
my_b.aa = 5; /* not a member of my_b */
my_b.bb = 6;
}
海湾合作委员会的结果:
$ gcc -std=c11 struct_extend.c
struct_extend.c:11:20: warning: declaration does not declare anything
struct struct_a;
^
struct_extend.c: In function ‘main’:
struct_extend.c:18:9: error: ‘volatile struct struct_b’ has no member named ‘aa’
my_b.aa = 5; /* not a member of my_b */
相关的:
$ gcc --version
gcc (Debian 6.3.0-18) 6.3.0 20170516
这是我的编译器中没有实现的,还是我做错了?
根据GCC https://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed-Fields参考:使用-fms-extensions
标志,这将启用此功能。
Unless -fms-extensions
使用时,未命名字段必须是不带标签的结构体或联合定义(例如,‘struct {
整数a; };')。如果-fms-extensions
使用时,该字段也可以是
带有标签的定义,例如‘struct foo { int a; };’
, 一个参考
到先前定义的结构或联合,例如“struct foo;”,或
对先前定义的结构的 typedef 名称的引用或
联合类型。
选项-fplan9-extensions
使-fms-extensions
以及其他两个扩展。首先,指向结构体的指针是
自动转换为指向匿名字段的指针
赋值和函数调用。
我在 GCC 上使用了以下命令,它工作正常。
gcc -std=c11 -O2 -Wall -fms-extensions -pedantic -pthread ls.c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)