文档章节

第10天C语言(07):条件编译-基本概念

lyh2017iOS
 lyh2017iOS
发布于 2017/07/08 10:05
字数 894
阅读 1
收藏 0
点赞 0
评论 0

#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;
}

© 著作权归作者所有

共有 人打赏支持
lyh2017iOS
粉丝 1
博文 354
码字总数 137380
作品 0
朝阳
十七、预处理指令3-文件包含

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 这讲介绍最后一个预...

长平狐 ⋅ 2013/03/28 ⋅ 0

C语言基础-09-预处理指令3-文件包含

一、基本概念 其实我们早就有接触文件包含这个指令了, 就是#include,它可以将一个文件的全部内容拷贝另一个文件中。 二、一般形式 1.第1种形式#include <文件名> 直接到C语言库函数头文件...

Corwien ⋅ 2016/03/16 ⋅ 0

10天自学C语言编程,如何改变一生

如果想读完一篇文章就能快速的掌握编程技术的话,这可能会让你失望,但是可以获得学习的方法就在好不过了。 下面是分享自学C语言编程的经历和方法。 1.决定 (图为2008年的笔记本) 2009年初,...

小辰GG ⋅ 2017/12/04 ⋅ 0

预处理指令

预处理指令简介 1.为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 2.C语言提供的预处理指令主要有:宏定义、文件包含、条件编译 一、不带参数的宏定义 ...

吴金瑞 ⋅ 2017/05/09 ⋅ 0

十六、预处理指令2-条件编译

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 上一篇已经介绍了预...

长平狐 ⋅ 2013/03/28 ⋅ 0

msyqlleftjoinon后面多个条件

ON 子句与 WHERE 子句的不同一种更好地理解带有 WHERE ... IS NULL 子句的复杂匹配条件的简单方法 Matching-Conditions 与 Where-conditions 的不同 关于 “A LEFT JOIN B ON 条件表达式” ...

linshaoneng ⋅ 2016/07/21 ⋅ 0

我是如何用 10 天自学编程,改变一生的?

编者按:本文来自微信公众号“商学院毕业的程序员”,通过自学编程成为一家大型上市公司的资深软件工程师。 我是我,一个因兴趣入行的商学院毕业的程序员。最近有不少人,来问我,想学编程,...

两味真火 ⋅ 2017/04/14 ⋅ 41

C语言的谜题

我们可以看到很多C语言相关的一些东西。比如《语言的歧义》主要告诉了大家C语言中你意想不到的错误以及一些歧义上的东西。而《谁说C语言很简单》 则通过一些看似你从来不可能写出的代码来告诉...

crazyinsomnia ⋅ 2010/02/22 ⋅ 3

C语言基础-07-预处理指令1-宏定义

预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编...

Corwien ⋅ 2016/03/16 ⋅ 0

C语言基础-08-预处理指令2-条件编译

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

Corwien ⋅ 2016/03/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部