linux学习之五---条件编译
来源:互联网 发布:net.cn域名是什么域名 编辑:程序博客网 时间:2024/05/29 13:37
条件编译
一般情况下,源程序中所有的行都会被编译。有时,我们希望程序中某一部分只在某个条件不成立或成立时才去编译,也就是对一部分内容指定编译的条件,这就是条件编译。
条件编译使用范式
范式一:
#ifndef 标识符
程序段1
#endif
其含义是:如果没有定义标识符,就编译程序段1,否则不编译程序段1。
(范式一主要应用于确保文件多次包含仍能安全工作,使用该范式可以有效的防止重复包含的发生)
使用#ifndef可以避免下面这种错误:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;
如果加了#ifndef,则不会出现这种错。
比如:你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。
范式二:
#ifndef 标识符
程序段1
#else
程序段2
#endif
其含义是:如果没有定义标识符,就编译程序段1,否则编译程序段2。
范式三:
#ifdef 标识符
程序段1
#endif
其含义是:如果定义了标识符,就编译程序段1,否则不编译该程序段。(下面举例)
范式四:
#ifdef 标识符
程序段1
#else
程序段2
#endif
其含义是:如果定义了标识符,就编译程序段1,否则编译程序段2
范式五:
#if 表达式
程序段1
#endif
其含义是:如果表达式成立,则编译程序段1,否则不编译该程序段1
范式六:
#if 表达式
程序段1
#else
程序段2
#endif
其含义是:如果表达式成立,则编译程序段1,否则编译程序段2
举例:
#include<iostream>#define DEBUGusing namespace std;int main(){int sum=0;int c=1;for(int i=1;i<=10;i++){sum+=i;#ifdef DEBUG cout<<"debug->sum:"<<sum<<endl;#endif //在调试程序时,我们可能需要输出某些值,来判断程序运行是否正确, //这是只需要在程序前面宏定义一个debug,然后利用#ifnedf来输出要调试的结果,调试完毕“//“掉宏定义即可。}cout<<"sum:"<<sum<<endl;#if 1 //可以选择编译那一段程序cout<<"Hello ";#endif#if 0cout<<"World!"<<endl;#elsecout<<"World"<<endl;#endifsystem("pause");return 0;}
2 0
- linux学习之五---条件编译
- linux下Makefile学习之五(使用条件判断)
- linux c 之 条件编译
- linux多线程学习(五)---条件变量
- Linux学习之条件判断
- linux学习-条件编译和结构体
- C# 2.0学习之--条件编译
- c语言学习笔记之条件编译
- Linux多线程基础学习(五)线程同步-条件变量
- Linux命令学习之五
- linux 线程学习之条件变量
- linux 线程学习之条件变量
- linux 线程学习之条件变量
- linux学习之十六---条件变量pthread_cond_wait
- Linux学习之第十九、条件判断
- linux 线程学习之条件变量
- linux 线程学习之条件变量
- linux 线程学习之条件变量
- 带索引的mapReduce
- ASP.NET有什么好处
- 微软公司等数据结构+算法面试100题(第1-100题)全部出炉
- 知识源于生活而高于生活
- Hadoop实战-中高级部分 之 Hadoop MapReduce高级编程
- linux学习之五---条件编译
- 25个有趣的SSH命令
- oracle 中char和varchar区别
- 字符串的全排列和组合算法
- 爱奇艺2015校园招聘产品笔试题
- RNA-seq差异表达分析工作流程
- MapReduce:详解Shuffle过程
- 网站内容质量分析
- CTF要是我能参加明年的BCTF就。。。。。。。