猿问

C联合字段时出现问题

我想访问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)


谁能告诉我访问联合字段的正确方法?


浮云间
浏览 157回答 1
1回答

天涯尽头无女友

为了类型安全,似乎将联合视为[N] byte,N ==最大联合项目的大小。因此,在这种情况下,有必要将“可见”类型处理为[8] byte。然后它似乎起作用:package main/*#include <stdio.h>#include <stdlib.h>union bar {&nbsp; &nbsp; &nbsp; &nbsp;char&nbsp; &nbsp;c;&nbsp; &nbsp; &nbsp; &nbsp;int&nbsp; &nbsp; i;&nbsp; &nbsp; &nbsp; &nbsp;double d;} bar;void foo(union bar *b) {&nbsp; &nbsp; printf("%i\n", b->i);};*/import "C"import "fmt"func main() {&nbsp; &nbsp; b := new(C.union_bar)&nbsp; &nbsp; b[0] = 1&nbsp; &nbsp; b[1] = 2&nbsp; &nbsp; C.foo(b)&nbsp; &nbsp; fmt.Println(b)}(11:28) jnml@celsius:~/src/tmp/union$ go build && ./union513&[1 2 0 0 0 0 0 0](11:28) jnml@celsius:~/src/tmp/union$&nbsp;注意:相同的代码将在具有其他字节序的机器上打印不同的数字。
随时随地看视频慕课网APP

相关分类

Go
我要回答