亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

在Golang中使用C語言代碼實(shí)例

2020-04-01 19:26:07
字體:
供稿:網(wǎng)友
這篇文章主要介紹了在Golang中使用C語言代碼實(shí)例,本文先是給出了一個(gè)Hello World例子、Golang 引用 C例子,并總結(jié)了一些要注意的地方,需要的朋友可以參考下
 

cgo 使得在 Golang 中可以使用 C 代碼。

Hello World

為了有一個(gè)較為直觀的了解,我們來看一個(gè)簡單的例子,創(chuàng)建文件 main.go:

復(fù)制代碼代碼如下:

package main
 
/*
#include <stdio.h>
 
void sayHi() {
    printf("Hi");
}
*/
import "C"
 
func main() {
    C.sayHi()
}

執(zhí)行程序:
復(fù)制代碼代碼如下:

go run main.go

程序執(zhí)行并輸出 hi(更多的范例可以見 $GOROOT/misc/cgo)。

 

Windows 下的準(zhǔn)備工作

如果想要在 Windows 上使用 cgo,那么需要安裝 gcc 編譯器,這里我使用 mingw-w64。

設(shè)置編譯和鏈接標(biāo)志

我們使用 import “C” 導(dǎo)入的是一個(gè)偽包(pseudo-package),我們通過其來使用 C 代碼。在 import “C” 之前,緊跟著 import “C” 的注釋可以包括:

1.編譯器和鏈接器標(biāo)志
2.C 代碼

我們可以通過 #cgo 指令來設(shè)置編譯器和鏈接器標(biāo)志,例如:

復(fù)制代碼代碼如下:

// #cgo CFLAGS: -DPNG_DEBUG=1
// #cgo amd64 386 CFLAGS: -DX86=1
// #cgo LDFLAGS: -lpng
// #include <png.h>
import "C"

 

附帶提及一點(diǎn)的是,這些指令中可以包含構(gòu)建約束(build constraint),詳細(xì)內(nèi)容見:http://golang.org/pkg/go/build/#hdr-Build_Constraints。

常用的 #cgo 指令有:

1.CPPFLAGS、CFLAGS 指令被用于編譯當(dāng)前包中的 C 文件(任何的 .c、.s、.S 文件)
2.CPPFLAGS、CXXFLAGS 指令被用于編譯當(dāng)前包中的 C++ 文件(任何的 .cpp、.cc、.cxx 文件)
3.LDFLAGS 指令用于指定鏈接器標(biāo)志
4.pkg-config 指令用于通過 pkg-config 工具獲取編譯器和鏈接器標(biāo)志(例如:#cgo pkg-config: png cairo)

Golang 引用 C

結(jié)構(gòu)體上需要注意的點(diǎn):

1.C 結(jié)構(gòu)體的域名稱如果為 Golang 的關(guān)鍵字時(shí),訪問時(shí)需要在域名稱前面加上 _。比如說,C 中有一個(gè)結(jié)構(gòu)體變量 x,此變量對應(yīng)的結(jié)構(gòu)體中有一個(gè)域 type,那么在 Golang 中需要通過 x._type 來訪問 type 域
2.結(jié)構(gòu)體的位域、非對齊數(shù)據(jù)等無法在 Golang 中表示時(shí)會被忽略
3.Golang 結(jié)構(gòu)體中不能使用 C 類型的域

標(biāo)準(zhǔn)的 C 數(shù)值類型對應(yīng):

1.C.char
2.C.schar(signed char)
3.C.uchar(unsigned char)
4.C.short
5.C.ushort(unsigned short)
6.C.int
7.C.uint(unsigned int)
8.C.long
9.C.ulong(unsigned long)
10.C.longlong(long long)
11.C.ulonglong(unsigned long long)
12.C.float
13.C.double

任何的 C 函數(shù)(包括 void 函數(shù))都可以返回一個(gè)返回值和 C 的 errno 變量(作為錯(cuò)誤):

復(fù)制代碼代碼如下:

n, err := C.sqrt(-1)
_, err := C.voidFunc()

 

直接調(diào)用 C 函數(shù)指針目前還無法支持。

有一些特殊的函數(shù)可以用于 C 類型和 Golang 類型之間轉(zhuǎn)換(通過數(shù)據(jù)拷貝的方式),偽定義如下:

 

復(fù)制代碼代碼如下:

// Golang 的字符串轉(zhuǎn)為 C 字符串
// C 的字符串是使用 malloc 分配的,因此,此函數(shù)的調(diào)用者
// 需要調(diào)用 C.free 來釋放內(nèi)存
func C.CString(string) *C.char
 
// 轉(zhuǎn)換 C 字符串到 Golang 字符串
func C.GoString(*C.char) string
 
// 轉(zhuǎn)換一定長度的 C 字符串到 Golang 字符串
func C.GoStringN(*C.char, C.int) string
 
// 轉(zhuǎn)換一塊 C 內(nèi)存區(qū)域到 Golang 的字節(jié)數(shù)組中去
func C.GoBytes(unsafe.Pointer, C.int) []byte

 

其他需要注意的點(diǎn):

1.C 語言中的 void* 對應(yīng) unsafe.Pointer
2.C 語言中的結(jié)構(gòu)、聯(lián)合、枚舉類型(而非變量),在 Golang 中需要加上 struct_、union_、enum_ 前綴訪問。由于 Golang 中沒有聯(lián)合這種數(shù)據(jù)類型,因此 C 的聯(lián)合在 Golang 中被表示為字節(jié)數(shù)組
3.和 C 語言等價(jià)的那些類型是不可以導(dǎo)出的


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
一区二区三区四区五区| 婷婷社区五月天| 亚洲国产一区视频| 97在线精品| 欧美日韩国产系列| 亚洲私人黄色宅男| 桃乃木香奈和黑人aⅴ在线播放| 国产三级精品三级观看| 一本加勒比hezyo黑人| 欧美aaa级片| 性高潮视频在线观看| 日韩在线中文字幕| 亚洲欧美日韩三级| 美丽的姑娘在线观看免费动漫| 亚洲最新中文字幕| 98精品国产自产在线观看| 日韩成人xxxx| 黄视频网站在线观看| 日韩av手机在线看| 中文乱码字幕午夜无线观看| av不卡一区二区| 蜜桃av免费观看| 欧美日韩一级片在线观看| 欧美野外多人交3| 国产精品一区二区久久精品爱涩| 亚洲伊人伊成久久人综合网| 韩国19禁主播vip福利视频| 2019国产精品自在线拍国产不卡| 手机亚洲手机国产手机日韩| 国产美女网站视频| 3d动漫精品啪啪1区2区免费| 1024在线视频| 在线视频中文字幕一区二区| 亚洲国产日韩在线观看| 欧美激情一区二区三区久久久| 播金莲一级淫片aaaaaaa| 久久国产三级精品| 天堂在线www天堂中文在线| 免费看国产片在线观看| 9191精品国产综合久久久久久| 国产美女直播视频一区| 欧美一区在线看| 亚洲国产精品精华液ab| 国产最新免费视频| 爱情电影网av一区二区| 人妻夜夜爽天天爽| 97人人做人人爽香蕉精品| 91在线看国产| 一级特黄性色生活片| 超级白嫩亚洲国产第一| 美女啪啪无遮挡| 国产精品一区二区三区久久久| 免费人成在线观看网站| 日韩三级av在线播放| 亚洲一区二区三区在线免费观看| 国产精品久久久久久久久久免费| 黄色福利视频网站| 日韩毛片视频在线看| 超碰地址久久| 国产一区二区三区久久久久久久久| 成人综合一区| 成年人网站在线| 国产亚洲欧美日韩精品| www.av在线视频| 日本黄色小说视频| 精品免费久久久| 日韩成人影视| 一本久道中文字幕精品亚洲嫩| 国产精品天美传媒沈樵| 国产精品亚洲一区二区在线观看| 在线观看污污网站| 北条麻妃在线观看视频| 激情综合在线| 91在线视频导航| 日韩三级在线观看视频| 欧美性x x x| 69av视频在线观看| 亚洲精品aⅴ中文字幕乱码| 成人在线不卡| 国产综合久久久久久久久久久久| 欧美丝袜一区二区| 欧美久色视频| 国产不卡av在线播放| 97超碰成人在线| 午夜久久久久久久久| 日韩高清国产一区在线| 欧美性videosxxxxx| 国产精品欧美日韩一区二区| 日韩一区二区三区精品视频第3页| 欧美做爰性生交视频| 欧美精品精品精品精品免费| 热门国产精品亚洲第一区在线| 国产伦精品一区二区三区在线观看| 亚洲美女免费精品视频在线观看| 91视频久久久| 色网站在线视频| 国产91精品黑色丝袜高跟鞋| 成人在线免费在线观看| 亚洲美女一区二区三区| 欧美亚洲国产成人| 中文字幕中文字幕一区三区| 欧美欧美欧美欧美| 91在线精品播放| 天堂а√在线资源在线| 91好吊色国产欧美日韩在线| 国产精品无码一区二区桃花视频| 国模套图日韩精品一区二区| 亚洲人成网亚洲欧洲无码| 国产三级国产精品| 日本19禁啪啪吃奶大尺度| 美女久久久久| 女人天堂av在线播放| 26uuu成人网| 麻豆一区二区三区四区精品蜜桃| 亚洲日本va在线观看| 国产视频观看一区| 亚洲综合首页| 亚洲精品久久久久中文字幕欢迎你| 青草网在线观看| 午夜激情视频在线| 日韩精品中午字幕| 国产成人一区二区三区电影| 国产一区二区三区天码| 国产乱理伦片a级在线观看| 国产精品嫩草影院av蜜臀| 污视频在线免费观看网站| 都市激情一区| 激情四房婷婷| 日韩va亚洲va欧美va久久| 久久精品免视看| a天堂中文字幕| 欧美日韩国产精品一区| 国产熟妇久久777777| 亚洲欧美一区二区激情| 五月天一区二区三区| 九九久久成人| 成年人视频在线免费观看| 日本wwww色| 欧美另类在线观看| 国产精品无码电影在线观看| 精品国产成人在线影院| 亚洲av无码片一区二区三区| 国内一区二区在线| 国产精品久久久久久久久搜平片| 欧美视频中文字幕在线| 亚洲精品免费在线| 97超碰在线免费观看| 日本不卡二区| 无码人妻精品一区二区三区蜜桃91| 我不卡手机影院| 国产精品天堂蜜av在线播放| 久久99精品视频一区97| 91精品国产综合久久精品app| 国产精品手机在线| 国产cdts系列另类在线观看| 欧美高清自拍一区| jizzjizz在线| 国产偷亚洲偷欧美偷精品| 亚洲人成影院77777| 欧美精品99久久久| eeuss影院www免费影院| 小说区图片区亚洲| 免费黄色在线看| 亚洲欧美网站在线观看| 黄色毛片在线观看| 黄色片久久久久| 二吊插入一穴一区二区| 人人澡人人添人人爽一区二区| 亚洲午夜激情av| 久久久久久免费| 粉嫩一区二区三区性色av| 久久理论片午夜琪琪电影网| 91精品国产高清91久久久久久| 三上悠亚ssⅰn939无码播放| 精品久久久久久久久久久久包黑料| 中文字幕在线观看成人| 九七影院理伦片| 欧美6一10sex性hd| 国产精品乱子伦| 成人黄网18免费观看的网站| 99免费在线观看| 性插视频在线观看| 男人天堂99| 亚洲综合网站| 成年丰满熟妇午夜免费视频| 精品国产sm最大网站| 成人性做爰片免费视频| 精品久久久中文| 成人国内精品久久久久一区| 日产精品久久久久| 成人观看网站a| 乌克兰美女av| 在线免费观看欧美| 欧美男男激情freegay| 欧美成人精品不卡视频在线观看| 国产精品亚洲综合天堂夜夜| 国产精品一区免费观看| 精品这里只有精品| 欧洲精品在线观看| 国产在线精品国自产拍免费| 在线一区二区不卡| 韩国三级在线看| 亚洲精品aaaa| 欧美美女一区二区| 国产精品久久国产愉拍| 国产欧美久久一区二区| 国产亚洲成av人片在线观黄桃| 日本亚洲最大的色成网站www| 日韩欧美色视频| 在线亚洲激情| 国产av 一区二区三区| 欧美三级华人主播| 一本色道久久88亚洲综合88| 久久免费在线观看| 久久久久久久久久影视| av日韩在线免费观看| 在线精品观看国产| 欧美亚洲综合视频| 国户精品久久久久久久久久久不卡| 亚洲精品视频久久| 97人妻精品一区二区三区免费| 国产亚洲欧美一级| 久久99精品久久久久久青青日本| 欧美jizz18性欧美| 亚洲伦理在线观看| 亚洲91视频| 中文字幕佐山爱一区二区免费| 精品国偷自产在线| 久久影院中文字幕| 国产亚洲视频中文字幕视频| 美女羞羞视频在线观看| 国产精品天天狠天天看| 粉嫩av四季av绯色av第一区| 7777kkkk成人观看| 国产欧美日韩高清| 国产福利视频在线观看| 日韩亚洲欧美中文高清在线| 久久久久亚洲av无码网站| 久久久综合网站| 99re6热在线精品视频播放速度| 亚洲综合在线免费观看| 91中文在线视频| 精品国偷自产国产一区| 五月婷婷在线观看| 亚洲精品中文字幕无码蜜桃| 国产成人精品免高潮在线观看| 色综合色狠狠综合色| 男女午夜视频在线观看| 又色又爽又黄无遮挡的免费视频| 欧美xxxxx牲另类人与| 欧美日韩成人激情| 午夜视频在线网站| 激情综合在线| 好紧好硬好湿我太爽了| 国产精品99精品| 国内毛片久久| 紧缚捆绑精品一区二区| 久久久国产精品网站| 日韩激情av在线免费观看| 在线观看视频一区二区欧美日韩| 很黄很污的网站| 国产精品视频第一区| 亚洲乱码日产精品bd在线观看| 红桃视频国产精品| 成人午夜精品视频| 亚洲欧美激情一区二区三区| 视频一区二区三区中文字幕| 色视频线观看在线播放| www.一区二区三区.com| 95影院理论片在线观看| 国产真人做爰毛片视频直播| 成人有码在线播放| 日本韩国欧美国产| www在线视频观看| 欧美精品hd| 国产色91在线| 久久影视三级福利片| 特大黑人巨人吊xxxx| 精品视频免费| 久久人人爽人人爽爽久久| 国产h视频在线播放| 欧美又粗又大又长| 日韩一区二区三区三四区视频在线观看| 国产亚洲欧美视频| 欧美视频裸体精品| 国产经典一区二区三区| 午夜一级久久| 91色porny在线视频| 人妻少妇无码精品视频区| 国产二区视频在线| 岛国在线免费| 久久99精品久久久久子伦| 欧美色图影院| www在线视频| ass极品水嫩小美女ass| 国产精品丝袜久久久久久高清| 免费在线黄色av| 欧美成人网在线| 福利91精品一区二区三区| 91精品福利在线| 欧美日韩的一区二区| 国产精品亚洲欧美一级在线| 天堂а√在线官网| 国产伦精品一区二区三区视频痴汉| 麻豆av免费在线| 亚洲精品久久久久久| 538任你躁精品视频网免费| 一区二区三区四区五区| 日韩精品无码一区二区三区久久久| 夜夜嗨av色一区二区不卡| 黄色污污网站在线观看| japanesexxxxfree在线观看| 黄色一级片免费播放| 日韩激情av在线| 五月天激情综合| 久久精品视频在线观看| 久青草视频在线观看| 韩国专线一区二三区| 欧美精品一区在线播放| 男人猛进猛出女人屁股视频| 久久久综合久久久| 污污的视频免费观看| 亚洲一区免费| 国产精品美女www爽爽爽视频| 精品久久久香蕉免费精品视频| 欧美美女直播网站| 免费在线观看黄网站| 欧美三级午夜理伦三级|