我正在学习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语句
答案 0 :(得分:3)
C的printf
在libc中使用较低级别的系统调用实现。 libc具有用于I / O的缓冲区以提高性能,并决定何时刷新这些缓冲区(特别是printf
发出的stdout流将被缓冲)。
Go使用较低级别的系统调用拥有自己的printf
,为此根本不使用C的printf
或libc。因此,其刷新决策与C的printf
是分开的。
所以这里真的没有问题。 printf
不保证无缓冲的输出(如果需要,可以使用错误流显式地进行刷新),因此在C和Go版本之间没有保证的顺序。