如何在V语言中编写与C语言嵌入匿名联合体的结构体等价的代码?
如何在V语言中编写与C语言嵌入匿名联合体的结构体等价的代码?
嘿,我懂你碰到的这个问题了!你在C里写的那种匿名联合体嵌入结构体的写法,V语言里确实不能直接照搬,你之前写的代码编译报错就是因为V对匿名联合体的语法要求不一样。
先回顾一下你原来的C代码:
struct sname{ union{int a;}; int b; };
你尝试的V代码之所以编译失败,是因为V里的匿名联合体需要用__anon__这个特殊标识符来标记,而不是直接写union就完事。正确的等价写法应该是这样的:
struct Sname { __anon__ union { a int } b int }
这样写之后,编译器就能正确识别这是一个匿名联合体了,你可以像在C里一样直接访问结构体里的a和b,比如:
fn main() { mut s := Sname{} s.a = 10 s.b = 20 println(s.a) // 输出10 println(s.b) // 输出20 }
另外补充一点,如果你的匿名联合体里有多个成员,写法也是一样的,比如C里的:
struct sname{ union{ int a; float c; }; int b; };
对应的V代码就是:
struct Sname { __anon__ union { a int c f32 } b int }
这样就能实现和C里完全一样的匿名联合体功能啦,直接访问结构体实例的a、c、b成员就可以了。
备注:内容来源于stack exchange,提问作者reco




