golang中c语言函数执行顺序

我正在研究golang,但是有一部分用c语言是不懂的。


main中是第二次执行c语言函数,不同的IDE输出结果不同。为什么会打印出来?


package main


//#include<stdio.h>

//void callC() {

// printf("Calling C code!\n");

//}

import "C"

import "fmt"



func main() {

    fmt.Println("A Go statement")

    C.callC()

    fmt.Println("Another Go statement")

}

--在 GoLand 中(模板:go build with Run after build option) --

输出)

一个 Go 语句

另一个 Go 语句

调用 C 代码!


--在终端

$ go run hello.go

一条 Go 语句

调用 C 代码!

另一个 Go 语句


慕工程0101907
浏览 116回答 1
1回答

温温酱

Cprintf是在 libc 中实现的,使用较低级别的系统调用。libc 具有用于 I/O 的缓冲区以提高性能,并且它决定何时刷新这些缓冲区(特别是对printf发出的标准输出流进行缓冲)。Go 有自己的printf低级系统调用,它printf根本不使用 C 或 libc。因此,它的冲洗决定与 C 的决定是分开的printf。所以这里没有问题,真的。printf不保证无缓冲输出(如有必要,您可以使用错误流显式刷新),因此无法保证 C 和 Go 版本之间的顺序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go