[英]c language function execution order in golang
我正在學習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版本之間不能保證順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.