(转载)C/C++条件编译的相关知识点

转载 2012年03月22日 17:54:42

链接:

http://blog.csdn.net/ryf8805/article/details/4775515


情况1:预处理指示符(条件指示符)ifdef:
#ifdef _XXXX
   ......
#else
   ......
#endif

用来判断一个预处理器常量是否已经被定义,以便有条件的包含程序代码。

  作用:可以很方便的开启/关闭整个程序的某项特定功能。


情况2:预处理指示符(条件指示符)ifndef


# ifndef FILE_H   

# define FILE_H

/*file.h*/

#else 
    .....

#endif


这里的#ifndef,表示的是if not def。表示如果FILE_H常量没有被定义,则程序会初始化一个默认值,执行预编译里面的内容;
  作用:可以防止头文件的重复编译(嵌套包含).


情况3:
#if 常量
...程序段1...
#else
...程序段2...
#endif


表示如果常量为真(非0),就执行程序段1,否则执行程序段2。
  作用:这种方法可以将测试代码加进来。当需要开启测试的时候,
  只要将常量变1就好了。而不要测试的时候,只要将常量变0。


 有人会问:不用条件编译命令而直接用if语句也能达到要求,用条件编译命令有什么好处呢?的确,此问题完全可以不用条件编译处理,但那样做目标程序长(因为所有语句都编译),而采用条件编译,可以减少被编译的语句,从而减少目标的长度。当条件编译段比较多时,目标程序长度可以大大减少。


条件编译案例:

#include "stdafx.h"
#include <iostream>
using namespace std;

#define NUM 0

int main(int argc, char* argv[])
{
    #ifdef NUM

		printf("NUM已经宏定义过了!\n");

	#else

	    printf("NUM还没有宏定义过!\n");

//结束预编译
#endif


//编译预处理语句
#ifndef _NUM_
#define _NUM_
	
		printf("只能进行一次编译,防止重复编译!\n");	
		
//结束编译预处理
#endif


#if 1
   printf("非0表示为真,执行!\n");
#else 
   printf("为0表示假,不执行!\n");
#endif
  

	return 0;
}

        编译C++程序时,编译器自动定义了一个预处理器名字__cplusplus,可以根据他来判断该程序是不是C++程序,以便有条件编译一些代码。另外两个比较有用的预定义名字是:__LINE__和__FILE__。前者记录文件已经被编译的行数,后则包含正在被编译的文件的名字。另外__TIME__和__DATA__表示当前时间和日期。


       


c/c++中的条件编译实例

我们在写程序的过程中老是在头文件用这样的语句:       #ifdef 标志符        程序段1        #else         程序段2        #endif ...
  • hanghangde
  • hanghangde
  • 2016年04月11日 17:18
  • 2496

C++ 虚函数的知识点

C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术...
  • ZhongQi0808
  • ZhongQi0808
  • 2015年06月19日 16:34
  • 816

C++ 虚函数、纯虚函数、继承、虚表、多态原理相关知识点总结

虚函数与纯虚函数 虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数! 纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中...
  • thaedi1024
  • thaedi1024
  • 2015年07月23日 14:36
  • 597

C++的条件编译

一般情况下面C++的.h文件和.cpp文件里面的每一行代码都是要经过编译的,但是通过条件编译的方法可以让某些语句不编译, 条件编译常见的语句形式是: #ifdef 标示符 代码段1 #else 代码段...
  • Mewparadise
  • Mewparadise
  • 2015年04月11日 00:04
  • 689

成为C++高手之头文件与条件编译

但现在看起来真不爽,main.c依赖的文件不能在工程中管理,要修改那些文件的话麻烦大了。如何既能分成多个文件又能在工程中看到呢?可以,使用头文件(h文件)...
  • nkmnkm
  • nkmnkm
  • 2016年06月06日 06:17
  • 4929

linux c 之 条件编译

1. 正确的屏蔽一段代码  #if 0  // 如果if 后面的是 0 ,屏蔽掉以下一段代码,如果是1 ,使用以下一段代码。 XXXXXXXXXXX  #endif 2. 宏定义指令 ...
  • tianyeming
  • tianyeming
  • 2015年09月22日 09:35
  • 924

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

本文解决的问题:       1.  什么是预处理       2. 文件包含中尖括号和引号的区别    #include   #include "my.h"       3.  常用的 #def...
  • jenny_84
  • jenny_84
  • 2015年03月26日 10:21
  • 734

C/C++重要知识点

成员以其在类中声明的顺序构造 摘要: 分析以下代码的输出:#includeusing namespace std;class A{public: A(int j):age(j) , num(...
  • lishenglong666
  • lishenglong666
  • 2015年04月22日 17:38
  • 774

C/C++实战实用知识点记录

C/C++实战实用知识点记录1.extern “C”用法。  extern “C”可分为两个部分理解。extern表示这部分的函数或变量可在其他模块中使用。”C”表示该部分的函数采用C的编译方式编译,...
  • shiyimin1
  • shiyimin1
  • 2016年07月16日 17:04
  • 341

C/C++重要知识点汇总

C/C++重要知识点汇总(持续更新中)
  • Linux_ever
  • Linux_ever
  • 2016年04月14日 16:50
  • 991
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(转载)C/C++条件编译的相关知识点
举报原因:
原因补充:

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