网站首页 > 文章精选 正文
C语言中的条件编译
golang中没有类似C语言中条件编译的写法,比如在C代码中可以使用如下语法做一些条件编译,结合宏定义来使用可以实现诸如按需编译release和debug版本代码的需求
#ifndef
#define
... #end
golang中的条件编译
golang支持两种条件编译的实现方式
build tags文件后缀
1. 通过Build tags实现
build tags 是通过代码注释的形式实现的,要写在文件的最顶端;
go build指令在编译项目的时候会检查每一个文件的build tags,用来决定是编译还是跳过该文件
build tags遵循以下规则
- 不同tag域之间用空格区分,他们是OR关系
- 同一tag域之内不同的tag用都好区分,他们是AND关系
- 每一个tag都由字母和数字构成,!开头表示条件“非”
示例:
// +build darwin freebsd netbsd openbsd
约束此文件只能在支持kqueue的BSD系统上编译
一个文件可能包含多行条件编译注释,比如:
// +build linux darwin
// +build 386
约束该文件在linux/386 或 darwin/386平台编译
需要注意的点
tag注释和包声明必须用空行隔开,比如下面的写法是错误的,编译器会把第一行作为包说明来处理,而不是build tags
// +build !linux
package mypkg // wrong
正确的写法如下:
// +build !linux package mypkg // correct
编译方法:
只需要在go build指令后用-tags指定编译条件即可
go build -tags linux
2. 通过文件名后缀实现
具有_$GOOS.go后缀的go文件在编译的时候会根据当前平台来判断是否将该文件导入并编译;同样适用于处理器架构判断 _$GOARCH.go。
两者可以结合起来使用,形式为: _$GOOS_$GOARCH.go
示例:
mypkg_freebsd_arm.go // 只在 freebsd/arm 编译
mypkg_plan9.go // 只在 plan9 编译
文件名必须提供,如果只由后缀的文件名会被编译器忽略,比如:
_linux.go
_freebsd_386.go
这两个文件会被编译器忽略,因为以下划线开头的文件都会被忽略
猜你喜欢
- 2025-07-06 C语言精华:宏与预处理器技巧深度解析
- 2025-07-06 一文读懂C程序的编译过程(c 程序如何编译)
- 2025-07-06 C/C++ 自定义头文件,及头文件结构详解
- 2025-07-06 C#项目中引用不同版本的DLL(c# 引用c++的dll .h)
- 2025-07-06 20个最经典的C语言问答题,建议关注加收藏
- 2025-07-06 这些C++工程师面试题你都会了吗?(c/c++工程师面试会怎么问)
- 2025-07-06 C语言翻译环境:预编译+编译+汇编+链接详解
- 2025-07-06 VBA实现Excel无边框登录界面以及安全验证与用户交互设计
- 2025-07-06 C++基础知识总结(超详细总结)(c++ 基础知识)
- 2025-07-06 C++开发:源码编译过程(c++11源码)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)