#ifdef语句1
//程序2
#endif
作用:我们可以用它区隔一些与特定头文件、程序库和其他文件版本有关的代码。
代码举例:新建define.cpp文件
#include<iostream>
usingnamespacestd;
intmain(intargc,
char
*argv[])
{
#ifdefDEBUG
cout<<
"Beginningexecutionofmain()"
<<endl;
#endif
return0;
}
Pressanykeytocontinue
#include<iostream>
usingnamespacestd;
#defineDEBUG
intmain(intargc,
char
*argv[])
{
#ifdefDEBUG
cout<<
"Beginningexecutionofmain()"
<<endl;
#endif
return0;
}
Beginningexecutionofmain()
Pressanykeytocontinue
比如,新建头文件head.h,在文件中加入代码:
#defineDEBUG
#ifdefDEBUG
#endif
#include<iostream>
#include"head.h"
intmain(intargc,
char
*argv[])
{
#ifdefDEBUG
cout<<
"Beginningexecutionofmain()"
<<endl;
#endif
return0;
}
Beginningexecutionofmain()
Pressanykeytocontinue
C语言之详解#ifdef等宏
这几个宏是为了进行条件编译。
一般情况下,源程序中所有的行都参加编译。
但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。
有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。
条件编译命令最常见的形式为:
#ifdef标识符
//程序段1
#else
//程序段2
#endif
其中#else部分也可以没有,即:
#ifdef标识符
//程序段1
#endif
这种条件编译可以提高C源程序的通用性。
如果一个C源程序在不同计算机系统上运行,而不同的计算机又有一定的差异。
例如,我们有一个数据类型,在Windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这样往往需要对源程序作必要的修改,这就降低了程序的通用性。
可以用以下的条件编译:
#ifdefWINDOWS
#defineMYTYPElong
#else
#defineMYTYPEfloat
#endif
#defineWINDOWS
#defineMYTYPElong
#define
WINDOWS
这样,源程序可以不必作任何修改就可以用于不同类型的计算机系统。
当然以上介绍的只是一种简单的情况,可以根据此思路设计出其它的条件编译。
例如,在调试程序时,常常希望输出一些所需的信息,而在调试完成后不再输出这些信息。
可以在源程序中插入以下的条件编译段:
#ifdefDEBUG
print(
"device_open(%p)\n"
,file);
#endif
#defineDEBUG
调试完成后只需将这个define命令行删除即可。
有人可能觉得不用条件编译也可达此目的,即在调试时加一批printf语句,调试后一一将printf语句删除去。
的确,这是可以的。
但是,当调试时加的printf语句比较多时,修改的工作量是很大的。
用条件编译,则不必一一删改printf语句,只需删除前面的一条“#define
DEBUG”命令即可,这时所有的用DEBUG作标识符的条件编译段都使其中的printf语句不起作用,即起统一控制的作用,如同一个“开关”一样。
有时也采用下面的形式:
#ifndef标识符
//程序段1
#else
//程序段2
#endif
它的作用是:若标识符未被定义则编译程序段1,否则编译程序段2。
这种形式与第一种形式的作用相反。
以上两种形式用法差不多,根据需要任选一种,视方便而定。
还有一种形式,就是#if后面的是一个表达式,而不是一个简单的标识符:
#if表达式
//程序段1
#else
//程序段2
#endif
可以事先给定一定条件,使程序在不同的条件下执行不同的功能。
例如:输入一行字母字符,根据需要设置条件编译,使之能将字母全改为大写输出,或全改为小写字母输出。
#defineLETTER1
intmain(intargc,
char
*argv[])
{
charstr[20]=
"CLanguage"
;
charc;
inti=0;
while
((c=str[i])!=
')
'
{
i++;
#ifLETTER
if
(c>=
'a'
&&c<=
'z'
)c=c-32;
#else
if
(c>=
'A'
&&c<=
'Z'
)c=c+32;
#endif
printf
(
"%c"
,c);
}
return0;
}
CLANGUAGE
#defineLETTER0
如果将程序第一行改为:
clanguage
此时运行情况为:
当条件编译段比较多时,目标程序长度可以大大减少。
原文地址:http://baike.baidu.com/view/1617233.htm?fr=aladdin
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)