#ifdef #else #endif #fi #ifndef 的用法

预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。
   关于预处理命令中的文件包含(#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。

我们主要使用以下几种方法,假设我们已在程序首部定义#ifdef DEBUG与#ifdef TEST:

  1.利用#ifdef/#endif将某程序功能模块包括进去,以向某用户提供该功能。

  在程序首部定义#ifdef HNLD:

  #ifdef HNLD

  #include"n166_hn.c"

  #endif

  如果不许向别的用户提供该功能,则在编译之前将首部的HNLD加一下划线即可。

  2.在每一个子程序前加上标记,以便追踪程序的运行。

  #ifdef DEBUG

  printf(" Now is in hunan !");

  #endif

  3.避开硬件的限制。有时一些具体应用环境的硬件不一样,但限于条件,本地缺乏这种设备,于是绕过硬件,直接写出预期结果。具体做法是:

  #ifndef TEST

  i=dial();

  //程序调试运行时绕过此语句

  #else

  i=0;

  #endif

  调试通过后,再屏蔽TEST的定义并重新编译,即可发给用户使用了。

时间: 2024-11-03 16:51:18

#ifdef #else #endif #fi #ifndef 的用法的相关文章

#ifdef #else #endif #if #ifndef 的用法

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

(转)#ifndef的用法

原文链接:http://wenku.baidu.com/link?url=c4doqVo3U429RkwTN5eaJIfD2rEu-1bLKKQXuqO8drmL359PhUjVmzC7P94wBY90bqYjPBRiuujahij4AM_06OkiOThB3v91fXexqpIukG_ 定义 #ifndef x #define x ... #endif   这是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包

转:C++中 #ifdef 和#endif的作用

一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是"条件编译".有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句. 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2. 其中#else部分也可以没有,即: #ifdef 程

条件编译(#ifdef #else #endif #if)

时间:2014.07.01 地点:基地 ---------------------------------------------------------------------------- 一.预处理 细说条件编译前,先了解下预处理过程.预处理过程读入源码,即对源码进行扫描,检查包含的预处理指令和宏定义,对其进行初步转换,然后再将产生的这种新源码提供给编译器.预处理过程还会删除程序中的注释和多余的空白字符. 预处理指令以#号开头,后跟指令关键字,指令将在编译器对源码进行编译之前对源码做某些转

#ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif

这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入"extern "C"{" 和 " }"处理其中的代码,其中{ }内部的代码是通过extern"C"进行处理.要明白为何使用extern"C",还得从cpp中对函数的重载处理开始说起.在c++中,为了支持重载机制,在编译生

C++中#define,#ifdef和#endif的作用

今天发现一个好用的东西,自己在编写code时经常需要测试,但是每次呢测试的代码写了删删了写.很麻烦,运行也不美观.希望运行时不再显示之前测试好的代码,那边的测试代码就得全部注释或者删除再编译: 今天无意发现这个#define,#ifdef 和#endif 有这么个作用! 举例如下: /************************************************************************* > File Name: main.cpp > Author:

条件编译ifndef、ifdef、endif

1.条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2. 其中#else部分也可以没有,即: 1 #ifdef 2 程序段1 3 #endif 2.条件编译命令另一种形式: 1 #ifndef 标识符 2 程序段1 3 #else 4 程序段2 5 #endif 只是第一行与第一种形式不同:将“ifdef”改为“ifndef”.它的作用是:若标识符未被定义

C++中#ifdef、#endif等宏的使用

一般情况下,源程序中所有的行都参加编译.但是有时希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句,这就是"条件编译". 为了满足条件编译可以使用#ifdef.#ifndef.#endif等宏指令. 条件编译命令最常见的形式为: (1)如果宏定义了标识符1,则执行程序段1. #ifdef  标识符1 //程序段1 #endif (2)如果宏定义了标识符1,则执行程序段1:否则执行程序段2. #ifdef  标识符1 //程序段1 #else //程序段2 #endi

[转] #if, #elif, #else, #endif 使用

有些程序在调试.兼容性.平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可以通过变量设置,把所有可能用到的代码都写进去,在初始化时配置,但在不同的情况下可能只用到一部分代码,就没必要把所有的代码都写进去,就可以用条件编译,通过预编译指令设置编译条件,在不同的需要时编译不同的代码.(一)条件编译方法 条件编译是通过预编译指令来实现的,主要方法有:1.#if, #elif, #else, #endif#if 条件 1 代码段 1#elif 条件 2   代码段 2...#e