文档章节

iOS 中#define和预编译指令

Virgo_only
 Virgo_only
发布于 2016/10/09 17:26
字数 428
阅读 252
收藏 0

在iOS开发的过程中,经常会遇到如下的代码 :

#ifdef DEBUG
#   define DLog(fmt, ...) NSLog((@"^ %s line %d " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define DLog(...)
#endif

这是一个打印语句,用于调试程序,可是#ifdef这些都是什么鬼???#ifdef就是预处理指令。

预处理指令以#开头,#后是关键字,#和关键字之间允许有任意个空白字符。常用的预处理指令:

#        空指令,没有任何效果

#include 包含一个源代码文件

#define  定义宏

#undef   取消定义宏

#if      如果条件为真,则编译下面的代码

#elif    如果前面的#if不为真,则编译下面的代码

#endif   结束一个#if...#elif条件编译块

#ifdef   如果已经定义了某个宏,则编译下面的代码

#ifndef  如果没有定义某个宏,则编译下面的代码

#error   停止编译并显示错误信息

现在来看上边的打印语句的意思就是如果定义了 DEBUG 这个宏的话,

#   define DLog(fmt, ...) NSLog((@"^ %s line %d " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

这个宏定义才会有作用。可是我们并没有在工程里边提供 DEBUG 这个宏定义啊,但是程序还是可以打印日志,这不科学啊。

然而,打印 DEBUG的话可以得到它的值 为 1,说明是定义过的,可是在哪里定义了..

在 "Target > Build Settings > Preprocessor Macros > Debug" 里有一个"DEBUG=1"。

当我们Run, Test, Analyze时,就属于debug mode,当Profile, Archive时就属于release mode。在XCode的"Edit Scheme..."可以切换。

可以DEBUG这个关键字系统已经用了,我们就不要抢了,抢的话也会提示重复定义..

© 著作权归作者所有

Virgo_only
粉丝 7
博文 41
码字总数 12828
作品 0
石家庄
程序员
私信 提问
iOS学习——#define、const、typedef的区别

在iOS开发中经常遇到一些字段和类型的定义,例如配置生产和测试不同环境的参数等,这时候经常用到#define、const以及typedef。那么它们之间有什么区别呢?我们接下来一个一个具体了解下。 一...

mukekeheart
02/21
0
0
c++学习总结:define的小细节

在iOS开发中,我们可以使用#ifdef或者#ifndef来进行一些判断,这在我之前的博客中已经有所说明。今天我无意中又发现了一个小细节,总结起来就是预编译判断的两种方式,特在此与大家分享。 (...

召唤攻城狮
2014/05/19
291
0
iOS开发技巧(系列六-再谈#define和预编译指令)

之前写过一篇博客,iOS深入学习:华丽的#define,列出了一些常用的#define。 今天再总结一点#define和预处理指令的使用。 预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编...

召唤攻城狮
2014/04/27
6.5K
0
iOS开发,#define的使用(系列一)

1、判断当前设备是不是iOS7以上版本 #define IOSVERSION7ORABOVE (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)? (YES):(NO)) 如果判断系统的设备在项目中使用频繁,那么...

召唤攻城狮
2014/04/10
1K
0
iOS开发你不知道的事-编译&链接

关注公众号“iOSSir”!看你想看!得你想得! 对于平常的应用程序开发,我们很少需要关注和过程。我们平常开发就是集成的的开发环境,这样的IDE一般都将和的过程一步完成,通常将这种和合并在...

iOS开发_小迷糊
05/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java Web 中对 ServletRequest 的一些非常规操作解决方案

1. 前言 ServletRequest 是我们搞 Java Web 经常接触的 Servlet Api 。有些时候我们要经常对其进行一些操作。这里列举一些经常的难点操作。 2. 提取 body 中的数据 前后端交互我们会在 body...

码农小胖哥
36分钟前
2
0
《Dual Encoding U-Net for Retinal Vessel Segmentation》阅读笔记-MICCAI2019

作者:Bo Wang1,2, Shuang Qiu2, and Huiguang He1,2,3 目的:Retinal Vessel Segmentation is an essential step for the early diagnosis of eye-related diseases, such as diabetes and ......

JungleKing
39分钟前
2
0
一次看懂 Https 证书认证

TLS > 传输层安全性协定 TLS(Transport Layer Security),及其前身安全套接层 SSL(Secure Sockets Layer)是一种安全协议,目的是为网际网路通信,提供安全及数据完整性保障。 如图,TLS...

极客收藏夹
53分钟前
5
0
https证书买哪家好?有哪些供应商

在选购https证书前除了要了解类型外,还需要了解https证书供应商,毕竟不同的供应商,提供的产品质量与服务也是有差异的。今天小编就为大家讲讲https证书供应商方面的内容,希望各位会喜欢。...

安信证书
55分钟前
6
0
Zuul 配置

概述:zuul底层是基于servlet,是由一系列的filter链构成。 1、路由配置 a、单例serverId映射 zuul: routes: client-a: path: /client/** serviceId: client-a 意思是...

java框架开发者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部