为了账号安全,请及时绑定邮箱和手机立即绑定

C联合字段时出现问题

C联合字段时出现问题

Go
浮云间 2021-05-06 17:48:29
我想访问Go中的C union领域。下面是我的源代码,但编译时出现错误:package main// #include <stdio.h>// #include <stdlib.h>// union bar {//        char   c;//        int    i;//        double d;// };import "C"import "fmt"func main() {    var b *C.union_bar = new(C.union_bar)    b.c = 4    fmt.Println(b)}当我构建时,出现如下错误:bc未定义(类型* [8] byte没有字段或方法c)谁能告诉我访问联合字段的正确方法?
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

为了类型安全,似乎将联合视为[N] byte,N ==最大联合项目的大小。因此,在这种情况下,有必要将“可见”类型处理为[8] byte。然后它似乎起作用:


package main


/*


#include <stdio.h>

#include <stdlib.h>

union bar {

       char   c;

       int    i;

       double d;

} bar;


void foo(union bar *b) {

    printf("%i\n", b->i);

};


*/

import "C"


import "fmt"


func main() {

    b := new(C.union_bar)

    b[0] = 1

    b[1] = 2

    C.foo(b)

    fmt.Println(b)

}

(11:28) jnml@celsius:~/src/tmp/union$ go build && ./union

513

&[1 2 0 0 0 0 0 0]

(11:28) jnml@celsius:~/src/tmp/union$ 

注意:相同的代码将在具有其他字节序的机器上打印不同的数字。


查看完整回答
反对 回复 2021-05-17
  • 1 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信