我正在研究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 语句
1 回答
温温酱
TA贡献1752条经验 获得超4个赞
Cprintf
是在 libc 中实现的,使用较低级别的系统调用。libc 具有用于 I/O 的缓冲区以提高性能,并且它决定何时刷新这些缓冲区(特别是对printf
发出的标准输出流进行缓冲)。
Go 有自己的printf
低级系统调用,它printf
根本不使用 C 或 libc。因此,它的冲洗决定与 C 的决定是分开的printf
。
所以这里没有问题,真的。printf
不保证无缓冲输出(如有必要,您可以使用错误流显式刷新),因此无法保证 C 和 Go 版本之间的顺序。
- 1 回答
- 0 关注
- 102 浏览
添加回答
举报
0/150
提交
取消