美文网首页十天学会C语言程序员
C语言day10-07条件编译-基本概念

C语言day10-07条件编译-基本概念

作者: liyuhong165 | 来源:发表于2016-05-08 16:26 被阅读65次

    pragma mark 条件编译-基本概念

    pragma mark 概念

    /**
     条件编译 和 选择结构if的共同点
     都可以给定的条件进行判断,添加满足或者不满足都可以执行特定的代码
     1.生命周期不同
     if  运行时
     #if 编译之前
     2.#if需要一个明确的结束符号   #endif
     为什么要一个明确的结束符号
     如果省略掉#endif,那么系统就不知道条件编译的范围,那么会将满足条件之后的第二个条件之后的所有内容 都清除掉
     
     3. if会将所有的代码都编译到二进制中
     #if只会将满足条件的部分一直到下一个条件的部分 编译到二进制中
     
     条件编译的优点
     1.缩小应用程序的大小
     
     应用场景:
     一般用于调试和发布阶段进行测试
     调式阶段: 程序写代码的阶段
     发布阶段: 上传到AppStore的阶段
     */
    

    pragma mark 代码

    #include <stdio.h>
    
    #pragma mark - 调试和发布阶段 Log start
    #define DEBUG  0   // 0是调试阶段 1是发布阶段
    
    // format 是一个关键字 ...输入0个或者多个东西
    // define 是一个宏仅仅做替换 把YHLog(format,...)  替换了printf(format,## __VA_ARGS__)
    // 本质上 还使用printf来输出内容的,只不过是系统帮我们做了一个替换
    // 把DEBUG 改成 1 说明 else这个语句里面没有值 所以替换成空白
    #if DEBUG == 0
        // 调试阶段
    #define YHLog(format,...) printf(format,## __VA_ARGS__)
    #else
    #define YHLog(format,...)
    
    #endif
    #pragma mark 调试和发布阶段 Log end
    
    #define SCORE 90
    int main()
    {
    #warning if选择结构 
        // 可以通过终端(terminal)来确认 cc -c main.c 生成main.o 可以查看到字节比较大 924字节
        
        //  条件编译和if非常非常像
        // if选择结果会给定 条件进行判断, 如果条件满足就执行if后面大括号中的内容
        //  条件编译也一样, 会对给定的条件进行判断, 如果条件满足 就编译条件后面的内容
        /*    */
    
    
    
        int scoure = 90;
        if (scoure == 100) {
    //        printf("NB\n");
    //        printf("发朵大红花\n");
            YHLog("NB\n");
            YHLog("发朵大红花\n");
        }
        else if (scoure == 90)
        {
    //        printf("NX\n");
    //        printf("发朵小红花\n");
            YHLog("NX\n");
            YHLog("发朵小红花\n");
        }
        else
        {
    //        printf("继续加油\n");
    //        printf("别哭\n");
            YHLog("继续加油\n");
            YHLog("别哭\n");
        }
        // 运行的时候 执行
    //    int score = 100;
        
    #warning 使用条件编译 #if
        // 可以通过终端(terminal)来确认 cc -c main.c 生成main.o 可以查看到字节会比main敲的字节 少 804字节
        // 通过条件编译 系统会把条件满足的编译成二进制,不满足的条件 不会编译 其实就是把不满足的代码删掉
        /*
    
        // 预处理指令什么时候执行 ? 编译之前 \
        变量什么时候定义? 执行了才会定义
        // 注意点: 条件编译不能用来判断变量, 因为不在同一个生命周期
        // 概况: 君生我未生,我生君已老  // 没有缘分
        //  一般情况下, 条件编译 是 和宏电一结合在一起使用的
    // 编译之前 执行
    #if SCORE == 100
    printf("NB\n");
    printf("发多大红花\n");
    #elif SCORE == 90
    printf("NX\n");
    printf("发朵小红花\n");
    #else
    printf("继续加油\n");
    printf("别哭\n");
    #endif  // 作为结束符号
        */
        
    #warning 测试和发布阶段的输出
    #if DEBUG == 0
        char *name = "lyh";
        char *pwd = "123456";
    #else
        char *name = NULL;
        char *pwd = NULL;
    #endif
        
    //    printf("name = %s, pwd = %s\n",name,pwd);
        YHLog("name = %s, pwd = %s\n",name,pwd);
        return 0;
    }
    
    

    相关文章

      网友评论

        本文标题:C语言day10-07条件编译-基本概念

        本文链接:https://www.haomeiwen.com/subject/lvvsrttx.html