博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c25---条件编译
阅读量:6180 次
发布时间:2019-06-21

本文共 2334 字,大约阅读时间需要 7 分钟。

////  main.c//  条件编译(宏定义是简单的替换,要给参数和结果都加括号)#include 
#define SCORE 90#define DEBUG 1 // 0是调试阶段 1是发布阶段//printf和打印log是很消耗性能的。#if DEBUG == 0// 调试阶段#define NJLog(format, ...) printf(format,## __VA_ARGS__)#else// 发布阶段#define NJLog(format, ...)#endif/* 条件编译和选则结构if的共同点 都可以对给定的条件进行判断, 添加满足或者不满足都可以执行特定的代码 条件编译和选则结构if的共区别 1.生命周期不同 if 运行时 #if 编译之前 2.#if需要一个明确的结束符号 #endif 为什么需要一个明确的结束符号? 如果省略掉#endif, 那么系统就不知道条件编译的范围, 那么会将满足条件之后的第二个条件之后的所有内容都清除(不参与编译) 3.if会将所有的代码都编译到二进制中 #if只会将满足条件的部分一直到下一个条件的部分 编译到二进制中 条件编译的优点 1.缩小应用程序的大小 应用场景: 用于调试和发布阶段进行测试 调试阶段: 程序写代码的阶段 发布阶段: 上传到AppStore的阶段 */int main(int argc, const char * argv[]) { // 条件编译和if非常非常像 // if选择结构会对给定条件进行判断, 如果条件满足就执行if后面大括号中的内容 // 条件编译也一样, 会对给定的条件进行判断, 如果条件满足就编译条件后面的内容 int score = 90; if (score == 100) { printf("牛逼\n"); printf("发朵大红花\n"); NJLog("牛逼\n"); NJLog("发朵大红花\n"); }else if(score == 90) { printf("牛X\n"); printf("发朵小红花\n"); NJLog("牛X\n"); NJLog("发朵小红花\n"); }else { printf("继续加油\n"); printf("别哭\n"); NJLog("继续加油\n"); NJLog("别哭\n"); } int score = 100;/* 预处理指令什么时候执行? 编译之前。 变量什么时候定义? 执行了才会定义。编译之后。 注意点: 条件编译不能用来判断变量, 因为不在同一个生命周期 君生我未生, 我生君已老 一般情况下, 条件编译是和宏定义结合在一起使用的(都是预编译指令,生命周期一样)*/#if score == 100#if SCORE == 100 printf("牛逼\n"); printf("发朵大红花\n");#elif SCORE == 90 printf("牛X\n"); printf("发朵小红花\n");#else printf("继续加油\n"); printf("别哭\n");#endif // 作为结束符号,打印"继续加油,别哭" #if DEBUG == 0 //预编译指令都以#开头 char *name = "lnj"; char *pwd = "123";#else char *name = NULL; char *pwd = NULL;#endif //结束符号 printf("name = %s, pwd = %s\n", name, pwd); NJLog("name = %s, pwd = %s\n", name, pwd); return 0;}
////  main.c//  条件编译其它写法#include 
#define SCORE 100#define COUNT 50int main(int argc, const char * argv[]) { #ifdef SCORE // 判断是否定义了后面的宏 printf("score\n");#elif COUNT printf("count\n");#else printf("OTHER\n");#endif #ifndef SCORE // 是不是没有定义名称叫做SCORE的宏 printf("no score\n");#else printf("score\n");#endif #if defined(SCORE) // 判断是否定义了SCORE这个宏 printf("score\n");#else printf("no score\n");#endif #if !defined(SCORE) // 判断是否没有定义SCORE这个宏 printf("no score\n");#else printf("score\n");#endif return 0;}

 

转载地址:http://xvbda.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
软件测试常用术语
查看>>
linux磁盘与文件系统管理
查看>>
ORACLE 索引详解
查看>>
第五课_课后习题解答
查看>>
Linux日志系统分析
查看>>
Linux下双网卡绑定bond0
查看>>
你是否也在服务器租用的过程中对服务器各方面的问题产生疑问呢????
查看>>
SSH2屌丝增强版1:构建GenericDao
查看>>
nfs服务配置
查看>>
内存不足导致不能执行system
查看>>
Android Studio导出jar包
查看>>
mysql 锁机制
查看>>
add_header X-Frame-Options "SAMEORIGIN";NGINX
查看>>
linux中的计划任务
查看>>
第十九章 文本处理流编辑器:awk编程
查看>>
Xtrabackup+Rsync 备份数据库并同步到远端备份机
查看>>
activiti实战读书笔记——第九章 多实例
查看>>
php返回相对时间(如:20分钟前,3天前)的方法
查看>>
WilliamChart各种图表效果实现大全《IT蓝豹》
查看>>