linux学习之五---条件编译

条件编译

一般情况下,源程序中所有的行都会被编译。有时,我们希望程序中某一部分只在某个条件不成立或成立时才去编译,也就是对一部分内容指定编译的条件,这就是条件编译。

条件编译使用范式

范式一:

#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 DEBUG

using 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 0
	cout<<"World!"<<endl;
#else
	cout<<"World"<<endl;
#endif

	system("pause");
	return 0;
}

时间: 2024-09-29 17:38:03

linux学习之五---条件编译的相关文章

Linux学习之五——压缩与备份

一.Linux下常见的压缩文件 *.Z compress 程序压缩的档案(现在不流行了,用gzip也能解压): *.gz gzip 程序压缩的档案: *.bz2 bzip2 程序压缩的档案: *.tar tar 程序打包的数据,并没有压缩过: *.tar.gz tar 程序打包的档案,其中并且经过 gzip 的压缩 *.tar.bz2 tar 程序打包的档案,其中并且经过 bzip2 的压缩 二.常见压缩指令 1. gzip 压缩成gzip gzip [-cdtv#] 档案名 选项与参数: -c

马哥Linux学习笔记之五——邮件服务

1.SMTP只负责将邮件发送到服务器,其他的,像身份认证检测邮件,都不能完成.(25/tcp) ESMTP:Extended SMTP POP3:Post Office Protocol IMAP4:Internet Mail Access Protocol 2.Open Relay:开放式中继 就是人家的邮件从这个邮件服务器过,你都帮忙转发,这样就会成为产生垃圾邮件的根源.所以都要关闭Open Relay 3.SASL,Simple Authintication Secure Layer,简单

linux学习之九 学习过程总结

~写在前面 首先非常感谢孟老师的悉心讲解,使用这种新颖的教学方式(MOOC课堂+博客),也感到非常有幸随着老师的思路对linux的内核进行了初步的系统学习.结合代码和gdb调试工具跟踪分析对linux内核的一些重要机制有了更深刻的理解. 一 学习Linux内核的心得Linux系统的理解 liunx内核是一个十分庞大的操作系统,代码量动辄上千万行,并且还会越来越大,所以通过阅读代码来了解他的机制是不现实的.但是光拿着一本讲linux工作机制的书,比如那本引为经典的巨厚的<深入理解linux内核>

linux学习之路之LVM

试想一种情况,当初我们在规划磁盘的时候,只给某一个磁盘或分区之划分了30G的容量,但是后来,随着业务的需求,该磁盘或者分区的使用量会越来越大,等到以后再有数据存放时,发现该磁盘或者分区的容量不够用,此时该怎么办了?可以新增一个磁盘,经过格式化,挂载等过程就可以使用这个磁盘了,再将原来磁盘的数据完全的复制过来.等到后来又发现,规划的磁盘又太大了,然后又使用上述方法来减少磁盘的大小.虽然这种方法可行,但是效率低,比较复杂.不应该是我们首选的方法. 当然,我们可以这样做,将多个磁盘或者分区(PV)组合

Linux学习日志2-vim使用基础

vim是linux操作系统下的一个文本编辑工具,功能非常强大,但刚学习起来比较复杂.vim的所有功能要讲明白得有几百页,在这里只是记录一下vim的一些基本用法. 首先vim打开文件的三种方式: vim +# xxx(#是数字):表示打开xxx文件并将光标定位到指定行. vim -o xx1 xx2 xx3:表示同时打开三个文件,垂直分割显示 vim -O xx1 xx2 xx3:表示同时打开三个文件,水平分割显示 多个文件间跳转:键入ctrl+w后:→向左.←向右.↑向上.↓向下 vim打开文件

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; linux &nbsp; &nbsp; 学习 &nbsp;

决心书 我叫孙启浩,出生在山东淄博的一个农村.15岁初中还没有毕业,就去上了技校,其实父母是想让我提早的步入社会,我在那个地方学的是'电厂热能动力装置' 本来我是想学it的可是我父母说就学这个因为在我们那里电厂找工作也好找工资肯定比学it工资要高,我就这样在那个对我来说无所谓的学校学了两年半.放暑假的时候我哥回来说要进京学it,我就想要不我也去学?因为我对这个it还是挺感兴趣的,之后就来了北京,先去看了一个学校叫'八维'觉得这个学校不怎么好,上来先学单词什么的我这种人一看书就想睡觉.然后我父亲的

linux学习笔记(一)-文件目录相关的命令&&文件通配符

一.几个命令概述 1.查看目录以及目录底下的文件:ls(-a显示隐藏文件:-d显示目录本身:-l显示详细内容:-R递归显示,即把子目录的文件也显示出来:-h以更加被人类理解的格式显示,比如显示文件大小的时候用M为单位显示:-i显示文件索引ID) 2.查看文件内容:cat,head,tail,less,more,tac cat:将文件连接起来,输出在屏幕上,可接多个文件(-E:显示隐藏的换行符:-n:显示出行号) head:默认查看文件的前10行(-n#:查看文件的前#行.空白行也是一行) tai

Linux学习日志day1——无人值守系统安装DHCP+TFTP+PXE+Kickstar

Linux学习日志day1--无人值守批量系统远程网络安装(DHCP+TFTP+PXE+Kickstar)                                         --作者:江信瀚 服务器环境介绍: 主机名:workstation.example.com 关闭SElinux以及防火墙 虚拟机:VMware(关闭了VMware的DHCP服务) 网卡配置: 静态IP获取! IPV6全部都删除,因为根本用不到 子网IP可以在VMware中设置 8.8.8.8是谷歌的DNS服务器

linux学习-练习1

touch 创建多目录 ls查看当前目录下的所有隐藏文件 ls查看/boot目录下面的所有目录 帮助的使用 内部命令 用 help command   或  man bash 外部命令 用 command --help 或  command -h 使用手册 man 信息页 info date命令: 显示昨天 : date -d yesterday 显示前天 : date -d '-2 day' 显示当天 :  date -d '0 day' +%F 显示当前日期,格式:2016-08-08 显示