advanced-go-programming-book icon indicating copy to clipboard operation
advanced-go-programming-book copied to clipboard

2.2.2 最后的代码

Open icaiyu opened this issue 6 years ago • 1 comments

原来的代码如下

package main

/*
#cgo windows CFLAGS: -DCGO_OS_WINDOWS=1
#cgo darwin CFLAGS: -DCGO_OS_DARWIN=1
#cgo linux CFLAGS: -DCGO_OS_LINUX=1

#if defined(CGO_OS_WINDOWS)
    const char* os = "windows";
#elif defined(CGO_OS_DARWIN)
    static const char* os = "darwin";
#elif defined(CGO_OS_LINUX)
    static const char* os = "linux";
#else
#    error(unknown os)
#endif
*/
import "C"

func main() {
    print(C.GoString(C.os))
}

建议把 static const char* os = "darwin"; 和static const char* os = "linux"; 的 static去掉,否则会有错误,cgo可以调用static函数,但是无法读取static变量

icaiyu avatar Jul 27 '19 14:07 icaiyu

如果没有static,os这个全局的名字污染太严重了, 或许用宏会好一点

chai2010 avatar Aug 10 '19 08:08 chai2010