预处理之条件编译

原创 2012年03月26日 20:35:24

#ifdef的用法

头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 

还是把头文件的内容都放在#ifndef#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的: 

#ifndef <标识
#define <标识

...... 
...... 

#endif 

<标识>在理论上来说可以是自由命名的,但每个头文件的这个标识都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h 

#ifndef _STDIO_H_ 
#define _STDIO_H_ 

...... 

#endif 


(2)

灵活使用#ifdef指示符,我们可以区隔一些与特定头文件、程序库和其他文件版本有关的代码。
代码举例:新建define.cpp文件

include "iostream.h"
int main()
{
#ifdef DEBUG      
cout<< "Beginning execution of main()";
#endif      
return 0;
}
运行结果为:Press any key to continue

改写代码如下:
include "iostream.h"
#define DEBUG
int main()
{
#ifdef DEBUG      
cout<< "Beginning execution of main()";
#endif       
return 0;
}
运行结果为:Beginning execution of main()
                      Press any key to continue

更一般的情况是,#define语句是包含在一个特定的头文件中。
比如,新建头文件head.h,在文件中加入代码:

#ifndef DEBUG
#define DEBUG
#endif

而在define.cpp源文件中,代码修改如下:
include "iostream.h"
include "head.h" 
int main(){
#ifdef DEBUG      
cout<< "Beginning execution of main()";
#endif       
return 0;
}
运行结果如下:Beginning execution of main()
                         Press any key to continue 
结论:通过使用#ifdef指示符,我们可以区隔一些与特定头文件、程序库和其他文件版本有关的代码。


(3)
如果你的程序由几个文件组成,而且有两个以上的文件都要包含同一个文件,为了避免重复包含同一个文件,所以在要被包含多次的文件中用#ifdef
#ifdef    就是说if    define,(如果定义了)   
   就像if    else语句一样

/*试举一个例子:   
   如果想编写一个既可用    TC    编译又可用    VC    编译的程序,但不同的编译器生成的可执行文件的功能不同时,    #ifdef    就有用了.   
    
   下面这个程序,如果用    VC    编译,只会显示一句话;    但若用    TC    编译,既显示一句话,又把背景颜色改为蓝色。   
   这样做的原因是    VC    没有    textbackground()    这个函数,    为了不改变源程序而适应不同的编译器,    这种条件编译(conditional    compilation)的方法比较有用.   
   另外,有些    Windows    API    对操作系统的版本有要求,这时条件编译又可派上用场了.   
   */   
    
   i nclude    <stdio.h>   
   i nclude    <conio.h>   
    
   #ifdef    WIN32 /*使用    Visual    C++    6.0    作为编译器时,    "WIN32"    自动被VC定义,*/   
   #define    VC /*从而定义了"VC"*/   
   #endif   
    
   int    main(void)   
   {   
   #ifdef    VC /*如果    VC    被定义,    执行下面的代码*/   
   printf("This    program    was    compiled    by    VC    6.0\n");   
    
   #else /*否则(    VC    未被定义),    执行下面的代码*/   
   /*使用    Turbo    C    作为编译器时执行*/   
   textbackground(BLUE); /*背景颜色改为蓝色*/   
   clrscr();   
   printf("This    program    was    not    compiled    by    VC    6.0\n");   
   #endif /*#ifdef    VC*/   
    
   /*不论用何编译器,    以下代码都会被编译*/   
   printf("Hello,    world");   
   getch();   
   return    0; 

c#中预处理指令来实现条件编译

C#预处理器指令是在编译时调用的。预处理器指令(preprocessor directive)告诉C#编译器要编译哪些代码,并指出如何处理特定的错误和警告。C#预处理器指令还可以告诉C#编辑器有关代码...
  • ghevinn
  • ghevinn
  • 2015年08月27日 14:01
  • 1464

c语言编译预处理和条件编译执行过程的理解

在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令。预处理命令属于C语言编译器,而不是C语言的组成部分。通过预处理命令可扩展C语言程序设计的环境。 一.预处理的工作方式   ...
  • liaoshengshi
  • liaoshengshi
  • 2015年11月12日 00:24
  • 1026

预处理(宏定义、文件包含、条件编译)

预处理(pre-treatment),是指在进行最后加工完善以前进行的准备过程,具体应用在不同的行业或领域,会有不同的解释。       一、含义 程序设计中的预处理(Prepro...
  • u012211419
  • u012211419
  • 2015年08月17日 20:16
  • 593

预处理(宏定义、文件包含、条件编译)

预处理(pre-treatment),是指在进行最后加工完善以前进行的准备过程,具体应用在不同的行业或领域,会有不同的解释。       一、含义 程序设计中的预处理(Preprocess),程序...
  • bzhxuexi
  • bzhxuexi
  • 2013年10月18日 16:09
  • 3482

条件编译和常用预处理标识符的简单介绍

条件编译:一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)。 ...
  • NICOC_
  • NICOC_
  • 2017年04月11日 14:52
  • 273

预处理:头文件、宏定义、条件编译

一:预处理过程         预处理器将进行宏替换、条件编译和包含指定的文件。以“#”开头的命令行就是预处理器处理的对象。这些命令行可以出现在任何地方,其作用可延续到所在翻译单元的末尾。每一行都会单...
  • gqtcgq
  • gqtcgq
  • 2015年08月30日 21:13
  • 1848

预处理指令 宏定义 条件编译指令 static和extern关键字

IOS学习第16天预处理指令的概述1.预处理指令 在C语言中,预处理指令都是以 "#"开头 在C语言中只要是"#"开头都是预处理指令2.C程序完整流程 1>创建源文件 xxx....
  • MA7777777__
  • MA7777777__
  • 2016年08月25日 12:13
  • 432

条件编译,预处理

有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可以通过变量设置,把所有可能用到的代码都写进去,在初始化时配置,但在不同的情况下可能只用到一部分代码,...
  • wanggang_hzcw
  • wanggang_hzcw
  • 2017年04月18日 19:48
  • 69

预处理(条件编译)

条件编译的概念 在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。 回到顶部 一、基本用法 ...
  • ojl12345
  • ojl12345
  • 2013年10月31日 16:50
  • 857

预处理程序——条件编译

条件编译通常用于创建可以 在画
  • Stephan14
  • Stephan14
  • 2014年08月16日 09:18
  • 382
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:预处理之条件编译
举报原因:
原因补充:

(最多只允许输入30个字)