zoukankan      html  css  js  c++  java
  • #ifdef #else #endif #if #ifndef 的用法

      预编译就是在对源文件进行处理之前(如在语法扫描和分析之前),先处理预处理部分,精简代码,然后再进行编译。

      预处理命令有:#include 文件包含、#define 宏定义、以及要重点讲的#if、#ifdef、#else、#endif、#ifndef 条件编译。这里讲的是条件编译。

      条件编译,分下面三种情况:

      一、

    #ifdef_XXXX
        程序段1
    #else
        程序段2
    #endif

      表示的是,如果XXXX被宏定义过,即 if (#define XXXX),则执行程序段1,否则执行程序段2,执行后结束条件编译。

      实例如下:

    #define NUM
      .............
      .............
      .............
      #ifdef NUM
       printf("之前NUM有过定义啦!:) 
    ");  //执行这一步而不执行else程序块
      #else
       printf("之前NUM没有过定义!:( 
    ");
      #endif

      利用这种办法,将很容易开关程序中的某项功能。

      二、

    #ifndef_XXXX
        程序块1
    #else
        程序块2
    #endif

      表示的是,如果没有宏定义XXXX过(if not define XXXX),则执行程序块1,否则执行程序块2,最后结束条件预处理。

      

      三、

    #if 常量 
      ...程序段1...
      #else
      ...程序段2...
      #endif 

      这里表示,只要常量非零(不管是正是负),就执行程序块1,否则执行程序块2

      

    主要的用法有(来自CSDN的lijinyan3000整理):

    ”   我们主要使用以下几种方法,假设我们已在程序首部定义#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的定义并重新编译,即可发给用户使用了。  “

    ————全心全意投入,拒绝画地为牢
  • 相关阅读:
    【Java】抽象类、接口
    【Java】封装、继承、多态
    【Java】WrapperClass 包装类
    【Java】步入OOP 面向对象
    【MySQL】Windows8.0.19 解压版 下载安装
    【Java】05 Variable 变量
    【MySQL】更改root根用户密码 和 SQLyog安装
    LOJ2033.[SDOI2016]生成魔咒 (后缀自动机)
    HDU4641 Kstring (后缀自动机+线段树合并)
    HDU5853 Jong Hyok and String (广义后缀自动机)
  • 原文地址:https://www.cnblogs.com/Bw98blogs/p/7607855.html
Copyright © 2011-2022 走看看