(转载)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++篇】typedef相关知识点完全总结

struct和typedefstruct (1)在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在定义变量的时候就可:...

i2c相关知识点

本文转自: i2c 知识点总结   0、 总线端:主要是mach-smdkc110.c和i2c_s3c2410.c两个文件,主要完成资源的注册,在s3c24xx_i2c_pr...

<c:url>标签相关知识点

标签相关知识点 - GrandKai - 博客园 Sallet 博客园 首页 新随笔 联系 订阅管理 随笔-145  文章-1...

数据和C相关知识点

1.对下面的各种数据使用合适的数据类型: a.East Simpleton 的人口 b.DVD影碟的价格 c.本章出现次数最多的字母 d.这个字母出现的次数 答: a.int类型,可以是short、u...

<c:url>标签相关知识点

一、  标签的作用主要用来产生字符串类型的url,而不是产生一个超链接, 注意url(统一资源定位符)与超链接两个含义的区别. http://www.baidu.com" /> 在JSP页面中的输出形...

C++new/delete相关知识点详解

每个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区(free store)或堆(heap)。C语言用一堆标准库函数malloc和free在自由存储区中分配...

C++的虚函数相关知识点(二)

2. 以下几种情况下虚函数的特性将失效1)派生类没有重写该函数;2)使用基类对象(包括将派生类强制转换成基类对象)调用虚函数;示例代码如下://使用基类对象不能实现动态性 #include ...
  • yycec
  • yycec
  • 2011-04-26 18:56
  • 395

C++相关小知识点笔记

//float4个字节 double8个字节 以最大基本类型开辟空间 //若干属性位置顺序影响开辟空间 //int double int 24个字节 double int int 16个字节...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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