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 版本之间没有保证的顺序。
我在学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 版本之间没有保证的顺序。