iOS 小知识 - #if , #ifdef , #ifndef.
|
Q : 在项目的 .h 文件中,
#ifndef XXX_h
#define XXX_h
//程序段1
#endif /* XXX_h */
的作用?
A : 如果 XXX.h 不存在,就引入 XXX.h ,否则不用引入. 是为了防止该文件被重复引用.
#什么是重复引用:
其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include "a.h" 和#include "c.h"此时就会造成c.h重复引用。
#头文件被重复引用引起的后果:
有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些,但是对于大工程而言编译效率低下那将是一件多么痛苦的事情。
有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。
|
|
Q : #if , #ifdef , #ifndef 的使用方法?
A : #1,#2,#3.
#1
#if condition(表达式1)
//程序段1
(#elif condition(表达式n)
//程序段n
)
...
(#else
//程序段3
)
#endif
说明 : 如果 表达式1(condition
: true),则执行 程序段1,(否则如果 表达式2(condition : true),则执行 程序段n),(否则执行 程序段3). #2
#ifdef macro(标识符1)
//程序段1
(#else
//程序段2
)
#endif
说明 : 如果 有定义标识符1(#define
macro),则执行 程序段1,(否则执行 程序段2). #3
#ifndef macro(标识符1)
//程序段1
(#else
//程序段2
)
#endif
说明 : 如果 没有定义标识符1(#define
macro),则执行 程序段1,(否则执行 程序段2).与#2相反! |
iOS 小知识 - #if , #ifdef , #ifndef.的更多相关文章
- iOS小知识:计算字符串长度(如果有表情,表情的长度为1)
在做项目的时候,textField能够输入表情,但是iOS的表情是占两个字符的,再计算字符串长度的时候就和想象的不一样了,所以用了次方法会将表情的长度转成1,最后得到的字符串的长度就是能看到的实际的长 ...
- iOS 小知识-tips
--->1<--- arc的项目中使用非arc代码,则添加-fno-objc-arc: 非arc项目中使用arc代码,则添加-fobjc-arc. --->2<--- 实用的类 ...
- iOS 小知识
iOS 各版本: http://www.pig66.com/2018/145_1021/17357553.html
- iOS小知识:使UIButton中的图片和文字实现左对齐
UIButton setImage 和 setTitle之后,默认的 image和title 对齐方式是居中, 由于 title 长度不固定,所以如果要几个这样有image有title的按钮纵向排列对 ...
- IOS小知识纪录
1.scrollView缩放 #import "ViewController.h" @interface ViewController () <UIScrollViewDel ...
- iOS APP开发的小知识(分享)
亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...
- xcode 发展史 及 做iOS 必须知道的小知识
Xcode 3.0 是开发人员建立 Mac OS X 应用程序的最快捷方式,也是利用新的苹果电脑公司技术的最简单的途径.Xcode 3.0 将Mac OS X的轻松使用,UNIX 能量以及高性能的开发 ...
- C/C++预处理指令#define,#ifdef,#ifndef,#endif…
2016年12月29日更新: 今天查看以前文件的时候, 突然发现了#error 这个预处理指令.然后回想一下工作, 发现这个指令使用场景还是很多的.比如: 一个项目的模块儿之多,源文件之大,代码之多, ...
- C/C++预处理指令#define,#ifdef,#ifndef,#endif… (转)
本文转自博文C/C++预处理指令#define,#ifdef,#ifndef,#endif….这篇博文写得特别好,特转载. 本文主要记录了C/C++预处理指令,常见的预处理指令如下: #空指令,无任何 ...
随机推荐
- 坑爹的Android Ble 问题记录日志
开发Ble(公司项目,防丢器)已经有一段时间,由于是第一次接触Ble而网上资料又不多,且android平台自身的差异性,遇到了很多问题.为了将来方便查阅,在此做下记录.1.中兴手机,蓝牙手动断开后,无 ...
- Android问题:设置了requestWindowfeature(window.feature_no_title)后,为什么还要getwindow.setFlags?
//设置窗体全屏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams. ...
- URAL1079
Problem E Time Limit : 4000/2000ms (Java/Other) Memory Limit : 32768/16384K (Java/Other) Total Sub ...
- 关于 all-delete-orphan
当关联双方存在父子关系,就可以在 set 处设定 cascade 为 all-delete-orphan 所谓父子关系,即指由父方控制子方的持久化圣明周期,子方对象必须和一个父方对象关联.如果删除父方 ...
- bzoj 2463 [中山市选2009]谁能赢呢?(博弈)
2463: [中山市选2009]谁能赢呢? Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1290 Solved: 944[Submit][Stat ...
- GitHub上整理的一些工具,求补充
http://segmentfault.com/q/1010000002404545 技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MS ...
- firefox如何restart重启
1.开发者工具栏可以对firefox进行重启,不是关闭firefox又打开那种重启
- poj 1328贪心
Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...
- intellij安装 配置 创建项目
使用intellij创建项目的整个过程如下: 首先,点击intllij的.exe文件,如果是第一次安装,选择第二个选项即可 Intellij需要license key,可以使用注册机生成相应的name ...
- 某返利网站admin目录index.php文件混淆加密算法分析
---恢复内容开始--- 文件已经加密,可以在此下载:index.php 文件内容打开大概如此: 简单字符替换之后,发现字符串用base64_decode仍无法解码. 找到一个解码网站:找源码 解码后 ...