我正在学习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/