簡體   English   中英

Golang中的C語言函數執行順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM