doupo2633 2019-01-14 10:13
浏览 46
已采纳

Golang中的C语言函数执行顺序

I am studying golang, but there is a part that I do not understand using c language.

In main, the c language function is executed for the second time, and the output is different depending on the IDE. Why does this print out?

package main

//#include<stdio.h>
//void callC() {
// printf("Calling C code!
");
//}
import "C"
import "fmt"


func main() {
    fmt.Println("A Go statement")
    C.callC()
    fmt.Println("Another Go statement")
}

-- in GoLand (Template: go build with Run after build option) --
output)
A Go statement
Another Go statement
Calling C code!

-- in terminal
$ go run hello.go
A Go statement
Calling C code!
Another Go statement

  • 写回答

1条回答 默认 最新

  • douzhang5199 2019-01-14 14:44
    关注

    C's printf is implemented in libc, using lower level system calls. libc has buffers for I/O to improve performance, and it decides when to flush these buffers (specifically the stdout stream which printf emits to is buffered).

    Go has its own printf using lower level system calls, it doesn't uses C's printf or libc at all for this. Therefore its flushing decisions are separate from C's printf.

    So there's not problem here, really. printf doesn't guarantee unbuffered output (you can use the error stream for that, if necessary, of flush explicitly), so there is no guaranteed ordering between the C and Go versions.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 设计一个温度闭环控制系统
  • ¥100 关于加载卡的问题有能知道这个要怎么处理吗?
  • ¥100 rtmpose姿态评估
  • ¥15 java 通过反射找路径下的类,打包后就找不到
  • ¥15 通联支付网上收银统一下单接口
  • ¥15 angular有偿编写,
  • ¥15 centos7系统下abinit安装时make出错
  • ¥15 hbuildex运行微信小程序报错
  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头