我正在学习golang,但是有一部分我不了解使用c语言。

通常,第二次执行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发出的stdout流被缓冲)。

Go使用较低级别的系统调用拥有自己的printf,为此根本不使用C的printf或libc。因此,其刷新决策与C的printf分开。

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

关于go - Golang中的C语言函数执行顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54179416/

10-16 16:06