golang中c语言函数执行顺序

c language function execution order in golang

我在学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 语句
另一个 Go 语句
正在调用 C 代码!

-- 在终端
$去运行hello.go
Go 语句
正在调用 C 代码!
另一个 Go 语句

C 的 printf 在 libc 中实现,使用较低级别的系统调用。 libc 有 I/O 的缓冲区来提高性能,它决定何时刷新这些缓冲区(特别是 printf 发出的标准输出流被缓冲)。

Go 有自己的 printf 使用较低级别的系统调用,它根本不使用 C 的 printf 或 libc。因此它的刷新决定与 C 的 printf.

是分开的

所以这里没有问题,真的。 printf 不保证无缓冲的输出(如果需要,您可以使用错误流明确地刷新),因此 C 和 Go 版本之间没有保证的顺序。