我正在用 Go 編寫一個庫,我想將其導出到 c 共享庫。p0它工作得很好,但是我發現導出的標頭使用, p1, p2,...作為參數名稱而不是 Go 中的原始參數名稱有點煩人。有沒有辦法改變這種行為,或者我只是堅持這樣做?我在用go version go1.12.7 darwin/amd64例子:package main/*#import <stdlib.h>*/import "C"import (? ? "fmt")func main() {}//export MyFuncfunc MyFunc(input *C.char) {? ? fmt.Println(C.GoString(input));}go?build?-o?libout.so?-buildmode=c-shared輸出:extern?void?MyFunc(char*?p0);為什么沒有p0點名input?Go 函數可以通過以下方式導出以供 C 代碼使用://export MyFunctionfunc MyFunction(arg1, arg2 int, arg3 string) int64 {...}//export MyFunction2func MyFunction2(arg1, arg2 int, arg3 string) (int64, *C.char) {...}它們在 C 代碼中的形式如下:extern int64 MyFunction(int arg1, int arg2, GoString arg3);extern struct MyFunction2_return MyFunction2(int arg1, int arg2, GoString arg3);然而,當我編譯它給出的確切代碼時,我得到這個結果:extern GoInt64 MyFunction(GoInt p0, GoInt p1, GoString p2);extern struct MyFunction2_return MyFunction2(GoInt p0, GoInt p1, GoString p2);為什么參數沒有名字?
1 回答
慕容森
TA貢獻1853條經驗 獲得超18個贊
Go 允許任意符文名稱,例如,input您可以調用變量π。C 不允許這樣的名稱。大概cgo的作者不想限制你的名字,所以他們只是重命名了所有的東西。
奇怪的是,文檔暗示生成的代碼將使用您的名字。如果它確實這樣做了,那就太好了,前提是你的名字是可行的。
- 1 回答
- 0 關注
- 147 瀏覽
添加回答
舉報
0/150
提交
取消
