在cgo中不显示printf结果

eagi6jfj  于 12个月前  发布在  Go
关注(0)|答案(3)|浏览(109)

当我运行这段代码,我期望打印结果像A: 4, B: 89 .但实际上,不显示任何东西.
为什么这个程序不显示结果到标准输出?
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);
}

gcuhipw9

gcuhipw91#

感谢您的评论。
我可以得到预期的结果与下面的代码
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字段必须使用相同的类型。在问题代码中,struct字段的类型是不一样的。(C结构:32位int,Go结构:64位int)
在应答代码中,结构体字段在语言之间是相同的。(都是结构体:64位int)

  • 请注意,我的体系结构是darwin/amd64*
bf1o4zei

bf1o4zei2#

"console": "integratedTerminal"添加到vscode launch.json解决了我的问题。

wecizke3

wecizke33#

我在LiteIDE中运行程序,不显示c printf输出。
但是在终端运行同样的程序,然后显示c printf输出。

相关问题