码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2014-10-09 02:17:27      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:调试   条件编译   debug   

条件编译

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


条件编译使用范式


范式一:

#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;
}
bubuko.com,布布扣

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

标签:调试   条件编译   debug   

原文地址:http://blog.csdn.net/lanzhihui_10086/article/details/39898685

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!