预处理命令#if#ifdef#ifndef
发布日期:2021-06-28 21:17:30 浏览次数:2 分类:技术文章

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

预编译命令行中宏通过全局性的preprocessor Macros衍生

<#初实例值#>编码占位提示语言
表达式整体可视为不方便远程访问不方便调用的隐式别名
手机上面关闭消息通知推送避免叮咚响
<#macro#>

单独头h文件里面可以定义声明面向整个项目工程程序的全局型量符号

开发者自己手工操作按部就班操作/自动操作需要设置窗口中设置属性引子

preprocessor macros 预处理宏

编写转化编译阶段:

预处理命令(预处理阶段能够被机器识别辨别并分析做出回应的可响应指令/命令)
普通操作命令(预处理阶段不会被机器识别辨别也不会被机器分析机器也不会做出相应的响应只是单纯的被引入主工程包的普通具体动作操作指令)
常用的预处理阶段的命令
#if, #ifdef, #ifndef, #else, #elif, #endif
在预处理阶段机器将会识别辨别并分析这些可预编译的指令做出相应的响应让Clang编译器进行简单的逻辑控制,将不同分支下的普通具体动作操作指令单纯的引入主工程包内。
编译阶段细分:
先进行属性设置配置窗口中属性配置数据的读取识别-定义文件-预编译阶段-正式编译阶段。
语法体系下面最重要原则:字段名声明+字段名实例,声明和实例是语法检测正常的必要条件(.hm/.h/.m)。
业务功能本身来自于业务需求部门,与应用程序实际所处的debug/release模式无关,与业务相关的字段名声明+字段名实例必然都要注入项目工程包内缺一不可。所以没有采用预编译的逻辑分支必然是所有构建指令声明实例全部注入软件包。采用预编译的逻辑分支必然是所在的符合条件的预编译逻辑所在的条件分支在预编译阶段被注入项目工程包内供后期工程使用产生效果,其余不符合条件的其他预编译分支将失效不会被注入工程而是直接移除,实际上只有部分分支注入工程,其余直接抹除也就不存在同名冲突。

备注:预编译逻辑分支下构建研究的指令需要在其余逻辑分支中重复的构建,以确保在进行分支注入时可以在待注入的分支下查询到所需要的构建指令

预编译阶段本质促使业务方普通操作命令注入工程,注入动作完成之后并没有立刻触发执行普通操作命令。对普通操作命令而言,真正触发并执行的时间点对应项目工程运行时CPU工具将从内存中读取相关数据资源产生渲染用户效果

#define TESTMACRO 0

#define TESTTEST 1

if语句体系(普通操作命令if else范围/预处理命令#if #endif范围)

- (void)preProcessorMacros {
//#if expression结构:衍生有expression存在并且expression对应映射的内容值为真,那么紧随着该预处理命令的普通操作命令集合将 被注入项目工程 #if DEBUG NSLog(@"1111111111"); #endif //#ifdef macro结构:设备在逻辑编译至该预处理命令行前已经通过#define命令定义声明有macro宏符号(macro对应宏符号已经定义声明存在并且映射有待替换内容),那么紧随着该预处理命令的普通操作命令集合将 被注入项目工程 #ifdef TESTMACRO //语句体系开始 NSLog(@"TESTMACROTESTMACRO"); //语句体系结束 #endif //#ifndef macro结构:设备在逻辑编译至该预处理命令行前尚未通过#define命令定义声明有macro宏符号,那么紧随着该预处理命令的普通操作命令集合将 被注入项目工程 #ifndef TESTMACRO //语句体系开始 NSLog(@"TTTTTTTTTT"); //语句体系结束 #endif #ifdef TESTTEST #else //预处理切换逻辑分支 #endif}
- (void)preProcessorMacros {
//#if expression结构:衍生有expression存在并且expression对应映射的内容值为真,那么紧随着该预处理命令的普通操作命令集合将 被注入项目工程 #if DEBUG NSLog(@"1111111111"); #endif //#ifdef macro结构:设备在逻辑编译至该预处理命令行前已经通过#define命令定义声明有macro宏符号(macro对应宏符号已经定义声明存在并且映射有待替换内容),那么紧随着该预处理命令的普通操作命令集合将 被注入项目工程 #ifdef TESTMACRO //语句体系开始 NSLog(@"TESTMACROTESTMACRO"); //语句体系结束 #endif //#ifndef macro结构:设备在逻辑编译至该预处理命令行前尚未通过#define命令定义声明有macro宏符号,那么紧随着该预处理命令的普通操作命令集合将 被注入项目工程 #ifndef TESTMACRO //语句体系开始 NSLog(@"TTTTTTTTTT"); //语句体系结束 #endif #ifdef TESTTEST #else //预处理切换逻辑分支 #endif}

在这里插入图片描述

在这里插入图片描述
BuildConfiguration: Debug模式/Release模式—自动触发---->taeget/buildsettings/allcombined/preprocessor macros/Debug状态下衍生宏符号DEBUG=1/Release状态下衍生宏符号RELEASE=1,可供使用
在这里插入图片描述
在这里插入图片描述

转载地址:https://blog.csdn.net/yanhaijunyan/article/details/108618806 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:assetcatalog管理图片资源
下一篇:static、const、extern组合使用

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月14日 23时51分33秒