OC 30 day
因为在study的时候,看到这一段code,所以纪录一下,不过预处理跟OC的语法不是很有关连,各位就见谅啦。
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然後对处理後的代码进行编译。
经过处理後的代码,将会变的很精短。
基础的常用语法,接下来我们会利用这些语法做很多运用。
#define //定义一个预先宏
#undef //取消宏的定义
#if //编译初步中的条件命令,相当於C语法中的if语句
#ifdef //判断某个宏是否被定义(#define过),若已定义,执行後续的语句
#ifndef //与#ifdef相反,判断某些宏是否正确定义
#elif //若#if,#ifdef,#ifndef或前面的#elif条件不满足,则执行#elif之後的语句,相当於C语法中的else-if
#else //与#if,#ifdef,#ifndef对应,若这些条件不满足,则执行#else之後的语句,相当於C语法中的else
#endif //#if,#ifdef,#ifndef这些条件命令的结束标志。
#defined //与#if,#elif配合使用,判断某些宏是否被定义
#pragma //说明编译器信息
#warning //显示编译警告信息
#error //显示编译错误信息
在实务上,常常需要对开发和正式环境设定不同的参数,比方 API 的 URL、需不需要印 Log 等等。虽然说,这些事情可以手动调整,但是人非圣贤,难免会有失手的时侯。透过 Xcode 的 Macros(巨集)、Custom Flags 的定义,可以轻松帮我们避免诸如此类的问题发生。
1.在 "Target > Build Settings > Preprocessor Macros > Debug" 设置"DEBUG=1”。
2.之后在pch或工具类中就可以这麽写了:
#ifdef DEBUG
(debug 模式下的配置)
#else
(release 模式下的配置)
#endif
#ifdef DEBUG //调试状态,:LOG功能
#define SFString [NSString stringWithFormat:@“%s”,__FILE __]。lastPathComponent
//打印出所在文件名,所在行,可选地址
#define SFLog(...)printf(“%s:%p(line =%d):%s \ n \ n”,[SFString UTF8String],&self,__LINE__,[[NSString stringWithFormat:__ VA_ARGS__] UTF8String]) ;
//#else
//#define SFLog(s, ...) NSLog(@"<%@: %p (line = %d)> %@", self.class, self, __LINE__,[NSString stringWithFormat:(s),##__VA_ARGS__])
//#endif
#else // 发布状态, 关闭LOG功能
#define SFLog(s, ...)
#endif
系统宏介绍:
__LINE__:宏在预编译时会替换成当前的行号
__FUNCTION__:宏在预编译时会替换成当前的函数名称
__VA_ARGS__:简单的说,就是将左边…的内容替换进来
<<: Best Outlook PST Splitter Tool to divide Outlook PST files
笔者一开始看到这两个词的时候充满着黑人问号??? 同步不是应该表示可以同时处理多件事, 而非同步不是...
《荀子》一书的第二十三篇《性恶篇》提到:「坐而言,不如起而力行。」 疫情期间,因公司分流上班,每天都...
今天是预料之外的内容。 Kotlin在1.4.20-M2版本中弃用了Kotlin Android E...
为了大家都能吃到一份最棒的「刻骨铭心初恋金银情侣套餐」,接下来就由我「食神」亲自示范。首先要重金礼聘...
废话不多说直接开始 我们点选菜单按钮会连结到这个表单 全域变数 string MyConnectio...