首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

在Go包里增添C代码并且不使用CGO(不需要gcc)

2013-10-14 
在Go包里添加C代码并且不使用CGO(不需要gcc)如果go代码里使用了cgo,那么编译的时候电脑上必须按照gcc才能

在Go包里添加C代码并且不使用CGO(不需要gcc)

如果go代码里使用了cgo,那么编译的时候电脑上必须按照gcc才能正确编译

这篇文章展示了如何用c写一个包让go调用并且不需要使用cgo


A  需要注意的:

1.   C代码天生的不安全

2.   Go1的兼容性保证不包括C代码

3.   C函数不能inline

4.   逃逸分析不能跟踪传递到C函数里的value (逃逸分析:http://kenwublog.com/jvm-optimization-escape-analysis)

5.   C编译器(5c,6c,8c)没有对应的Go编译器优化做的好,因此生成的代码也许没有Go代码优化的那么好

6.   C代码是plan9风格的,与C89较相似


B  返回的方式

第一个例子是一个简单的返回true的函数:True

// Max returns the maximum of two integers.func Max(a, b int) int

E. 传递地址

前面两个例子,我们传递两个参数给函数并且把拷贝通过堆栈返回。Go的函数调用是值传递,调用C函数也是如此

最后一个例子我们将传递某个变量的指针给C函数,并通过指针改变这个值

1.双击env.cmd,以下命令都是在弹出的窗口里输入的2.测试:go test -v ccode输出:=== RUN TestTrue--- PASS: TestTrue (0.00 seconds)=== RUN TestMax--- PASS: TestMax (0.00 seconds)=== RUN TestInc--- PASS: TestInc (0.00 seconds)PASSok      ccode   0.255s3.安装ccode库:go install ccode4.编译:go build main5.运行:main.exe







热点排行