ifdef的用法(转)

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

}

posted @ 2013-10-14 14:16  总是TMD后知后觉  阅读(3571)  评论(0编辑  收藏  举报