zoukankan      html  css  js  c++  java
  • 预处理指令(条件编译)

    条件编译的概念

    •在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。
    一、基本用法

    #if 条件1

      ...code1...

     #elif 条件2

      ...code2...

     #else

      ...code3...

     #endif

    •1>如果条件1成立,那么编译器就会把#if 与 #elif之间的code1代码编译进去(注意:是编译进去,不是执行,很平时用的if-else是不一样的)
2> 如果条件1不成立、条件2成立,那么编译器就会把#elif 与 #else之间的code2代码编译进去
    •3> 如果条件1、2都不成立,那么编译器就会把#else 与 #endif之间的code3编译进去
    •4> 注意,条件编译结束后,要在最后面加一个#endif,不然后果很严重(自己思考一下后果)
    •5> #if 和 #elif后面的条件一般是判断宏定义而不是判断变量,因为条件编译是在编译之前做的判断,宏定义也是编译之前定义的,而变量是在运行时才产生的、才有使用的意义
     
    二、举个例子

    #include <stdio.h>

     2

     3 #define MAX 11

     4

     5 int main ()

     6 {

     7 #if MAX == 0

     8     printf("MAX是0");

     9 #elif MAX > 0

    10     printf("MAX大于0");

    11 #else

    12     printf("MAX小于0");

    13 #endif

    14     return 0;

    15 }

    •在第3行定义了一个宏MAX,当然在开发中这个MAX可能被定义在其他头文件中,现在只是为了方便演示,就写到main函数上面了。注意第7到第13行的条件编译语句。
由于MAX为11,所以#elif的条件成立,第10行代码将会被编译进去,其实编译预处理后的代码是这样的:

    int main ()

    4 {

    5     printf("MAX大于0");

    6     return 0;

    7 }

    三、其他用法

    •1.#if defined()和#if !defined()的用法
    •#if 和 #elif后面的条件不仅仅可以用来判断宏的值,还可以判断是否定义过某个宏。
    •比如:

    #if defined(MAX)

        ...code...

    #endif

    •如果前面已经定义过MAX这个宏,就将code编译进去。它不会管MAX的值是多少,只要定义过MAX,条件就成立。
     
    条件也可以取反:

    #if !defined(MAX)

        ...code...

    #endif

    •如果前面没有定义过MAX这个宏,就将code编译进去。
     
    2.#ifdef和#ifndef的使用
    •#ifdef的使用和#if defined()的用法基本一致

     #ifdef MAX

         ...code...

     #endif

    •如果前面已经定义过MAX这个宏,就将code编译进去。
    •* #ifndef又和#if !defined()的用法基本一致

     #ifndef MAX

         ...code...

     #endif

    •如果前面没有定义过MAX这个宏,就将code编译进去。
  • 相关阅读:
    wex5 实战 框架拓展之2 事件派发与data刷新
    wex5 实战 框架拓展之1 公共data组件(Data)
    wex5 实战 HeidiSQL 导入Excel数据
    wex5 实战 手指触屏插件 hammer的集成与优劣
    wex5 实战 登陆帐号更换与用户id一致性
    wex5 实战 用户点评与提交设计技巧
    wex5 实战 省市县三级联动与地址薄同步
    wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)
    wex5 实战 单页模式下的多页面数据同步
    [BZOJ]4237: 稻草人
  • 原文地址:https://www.cnblogs.com/ShaoYinling/p/4561050.html
Copyright © 2011-2022 走看看