`
huozheleisi
  • 浏览: 1234315 次
文章分类
社区版块
存档分类
最新评论

vc++学习篇(三)——预处理命令之条件编译(#ifdef,#else,#endif,#if等)

 
阅读更多
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。
关于预处理命令中的文件包含(#include),宏定义(#define),书上已经有了详细的说明,在这里就不详述了。这里主要是对条件编译(#ifdef,#else,#endif,#if等)进行说明。以下分3种情况:

1:情况1:
#ifdef _XXXX
...程序段1...
#else
...程序段2...
#endif
这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。

例:
#define NUM
.............
.............
.............
#ifdef NUM
printf("之前NUM有过定义啦!:) /n");
#else
printf("之前NUM没有过定义!:( /n");
#endif
}
如果程序开头有#define NUM这行,即NUM有定义,碰到下面#ifdef NUM的时候,当然执行第一个printf。否则第二个printf将被执行。
我认为,用这种,可以很方便的开启/关闭整个程序的某项特定功能。


2:情况2:
#ifndef _XXXX
...程序段1...
#else
...程序段2...
#endif
这里使用了#ifndef,表示的是if not def。当然是和#ifdef相反的状况(如果没有定义了标识符_XXXX,那么执行程序段1,否则执行程序段2)。例子就不举了。


3:情况3:
#if 常量
...程序段1...
#else
...程序段2...
#endif
这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序段1,否则执行程序段2。
我认为,这种方法可以将测试代码加进来。当需要开启测试的时候,只要将常量变1就好了。而不要测试的时候,只要将常量变0。

分享到:
评论

相关推荐

    C语言预处理命令之条件编译(_ifdef,_else,_endif,_if等)

    C语言预处理命令之条件编(_ifdef,_else,_endif,_if等)

    《C深度解析》第二章 C预编译——宏定义、条件编译、头文件包含、特殊预编译关键字

    (3)条件编译:#if、#else、#elif #endif、#ifdef和#ifndef、#if与defined、条件编译与配置文件(4)一些特殊的预编译关键字与实际应用:defined、#error、#line、#与##、#pragma (5)文件包含:是否只能包含.h...

    图像处理的 相关资料

    #endif 结束一个#if……#else条件编译块 #error 停止编译并显示错误信息 一、文件包含 #include预处理指令的作用是在指令处展开被包含的文件。包含可以是多重的,也就是说一个被包含的文件中还可以包含其他文件...

    学习VC MFC开发必须了解的常用宏和指令

    1、#include指令 ...条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。

    C++的编译过程及原理

    我们来看一个基本程序,由...这阶段是预处理阶段,比如说·#definem5,那么在该阶段会将程序中的m全部替换成5想必对于#define,大家都熟悉,接下来我们说说条件编译的关键字:条件编译指令:#ifdef,#ifndef,#else,#

    C/C++程序编译流程详解

    ②处理所有的条件编译指令,如:“#if”、“#ifdef”、“#elif”、“#else”、“endif”等。这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些...

    自己写的dll的简介

    #if defined(TEST_BUILD_DLL) && defined(TEST_USE_DLL) #error "macro conflict!" #endif #if defined(TEST_BUILD_DLL) // build dll # define TEST_API __declspec(dllexport) #elif defined(TEST_USE_DLL) // ...

    Objective-C2.0程序设计

    12.3.1 #ifdef、#endif、#else和#ifndef语句 12.3.2 #if和#elif预处理程序语句 12.3.3 #undef语句 12.4 练习 第13章 基本的C语言特性 13.1 数组 13.1.1 数组元素的初始化 13.1.2 字符数组 13.1.3 多维数组 13.2 ...

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    面试题1:简述#ifdef、#else、#endif和#ifndef的作用 面试题2:宏定义和函数 面试题3:用#define声明一个常数 面试题4:写一个“标准”宏MIN 面试题5:typedef和define有什么区别 面试题6:#define CHAR char*和...

    C++出错提示英汉对照表

    Bad ifdef directive synatax ------------------------------编译预处理ifdef有语法错 Bad undef directive syntax ---------------------------编译预处理undef有语法错 Bit field too large ----------------位...

Global site tag (gtag.js) - Google Analytics