当我运行此代码时,我希望打印结果如A: 4, B: 89
。
但实际上,不显示任何内容。
为什么这个程序不会将结果显示给stdout?
main.go:
package main
/*
#include "c.h"
*/
import "C"
import (
"unsafe"
)
type S struct {
A int
B int
}
func main() {
s := &S{A: 4, B: 89}
pass_to_c := (*C.S)(unsafe.Pointer(s))
C.gostruct(pass_to_c)
}
c.h
#include <stdio.h>
#include <stdlib.h>
typedef struct {
long int A;
long int B;
} S;
extern void gostruct(S *struct_s) {
printf("A: %ld, B: %ld\n", struct_s->A, struct_s->B);
}
答案 0 :(得分:1)
我在 LiteIDE 中运行程序,没有显示 c printf 输出。
但是在终端中运行相同的程序, 然后显示 c printf 输出。
答案 1 :(得分:0)
感谢您的评论。
我可以通过以下代码获得预期结果
main.go:
package main
/*
#include "c.h"
*/
import "C"
import (
"unsafe"
)
type S struct {
A int64 // 64bit int
B int64 // 64bit int
}
func main() {
s := &S{A: 4, B: 89}
pass_to_c := (*C.S)(unsafe.Pointer(s))
C.gostruct(pass_to_c)
}
c.h:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
long long int A; // 64bit int
long long int B; // 64bit int
} S;
extern void gostruct(S *struct_s) {
printf("{A: %lld, B: %lld}\n", struct_s->A, struct_s->B);
}
我认为struct field必须在语言之间使用相同的类型。 在问题代码中,struct字段类型不相同。 (C struct:32bit int,Go struct:64bit int)
在答案代码中,struct字段在语言之间是相同的。 (结构:64位int)
请注意,我的架构为darwin/amd64