IOS代码运行的磨刀石-预编译指令

IOS中代码运行的磨刀石--预编译指令

所谓预编译,就是程序代码在编译之前,开发工具为我们预先做的一些工作。不要小瞧这些指令,没有它们,我们的代码可能寸步难行。

一、文件包含相关预处理命令

#include <header>

#include "header"

C语言中使用的包含文件的指令""和<>的区别为,""是从当前目录开始寻找文件,<>是从系统库中寻找文件。这两个指令不能使头文件循环引入,也不能重复包含同一个头文件。

#import "header"

#import <header>

这两个指令和上面两个作用一样,只是更加智能,智能处理重复包含头文件的问题。

#include_next "header"

#include_next <header>

这两个指令是C中的指令,OC也支持,只是很少使用,它的作用是在找到名字匹配的头文件后跳过,寻找下一个相同名字的导入。

二、宏定义

宏定义是开发中会经常用到的一个指令了,我们还会将许多简单的函数定义为宏,省去系统压栈的时间,提高代码效率。因为这篇博客的主题是预处理命令,所以宏的用法和高级用法就不再多写了,下次再讨论。

#define 参数1 参数2

定义一个简单的替换宏,不带参数,在预编译阶段,会把所有参数1的地方直接替换为参数2。

#define ADD(x) (x+x)

定义一个带参数的宏,类似带参函数的功能,但也是编译前做简单替换。

三、条件编译

条件编译用于判断一个表达式是否成立,成立则进入条件编译。

方式一:

#if 表达式

#else

#endif

方式二:

#if 表达式

#elif 表达式

#endif

方式三:

#ifndef

如果没有定义一个宏进行编译

#ifdef

如果定义一个宏进行编译

四、错误,警告的预处理

#error 错误

当程序检查到这里时会停止编译,这个命令的作用是在错误的地方禁止编译。

#warning 警告

这个命令并不会影响程序的编译和运行,但是会认为的在这里显示一条警告信息,提醒我们自己。

五、更改文件名和行号

在OC中,有一个系统的定义的宏:

__LINE__

这个宏表示当前行的行号,可以打印。

#line number

改变当前行的行号,会影响下面所有的行

#line number "filename"

改变当前行号和编译后的文件名

六、编译器控制指令

#pragma 参数

这个预编译指令是最复杂的,用于控制编译器的行为,一般我们开发应用APP是很少用到的,常用的有两种方式:

#pragma mark - 信息

为代码加上标注

#pragma message("信息")

编译时提示信息

时间: 2024-10-13 00:36:30

IOS代码运行的磨刀石-预编译指令的相关文章

代码中的#region预编译指令

学习过程中遇到的,顺便就总结下来吧

iOS中的预编译指令的初步探究

看到非常好的两篇技术文,转来方便自己查看. 转自:http://www.cnblogs.com/daiweilai/p/4234336.html 开篇 我们人类创造东西的时候有个词叫做”仿生学“!人类创造什么东西都会模仿自己来创造,所以上帝没有长成树的样子而和人长得一样,科幻片里面外星人也像人一样有眼睛有鼻子……但是人类自己创造的东西如果太像自己,自己又会吓尿(恐怖谷效应),人类真是奇葩:奇葩的我们在20世纪创造了改变世界的东西——计算机(电脑),不用怀疑,这货当然也是仿生学!这货哪里长得像人了

iOS中的预编译指令

iOS中的预编译指令的初步探究 目录[+] 开篇 我们人类创造东西的时候有个词叫做”仿生学“!人类创造什么东西都会模仿自己来创造,所以上帝没有长成树的样子而和人长得一样,科幻片里面外星人也像人一样有眼睛有鼻子……但是人类自己创造的东西如果太像自己,自己又会吓尿(恐怖谷效应),人类真是奇葩:奇葩的我们在20世纪创造了改变世界的东西——计算机(电脑),不用怀疑,这货当然也是仿生学!这货哪里长得像人了??别不服,先听我说完,先把你的砖头放下.狭义的仿生学是外形上仿生嘛,其实广义上仿生学还可以原理的仿生

预编译指令跨平台的作用

程序的编译过程可以分为预处理.编译.汇编三部分,其中预处理是首先执行的过程,预处理过程扫描程序源代码,对其进行初步的转换,产生新的源代码提供给编译器. 预处理过程读入源代码之后,会检查代码里包含的预处理指令,完成诸如包含其他源文件.定义宏.根据条件决定编译时是否包含某些代码的工作. 通过预编译指令,只会把满足条件的代码编译进来,其他代码不参与编译 1, 指令 预编译指令以 #开头,整条语句构成一条预编译指令 2, 作用 C/C++ 语言的预处理主要有三个方面的内容: 1.宏定义: 2.文件包含:

在EJS脚本内使用“#include”预编译指令

此博客为9925.org的镜像,登录9925.org可以查看到最新博文. 原文出处:http://ily.so/26bMBz 预编译指令是Easton JavaScript脚本解释器对JavaScript语言拓展的重要功能之一,使用预编译指令可以引用外部的JS脚本代码,类似于HTML内的<script>标签引用外部JS脚本. #include语法解释 以“#include”指令开始,一行一个指令,指令后面加不加空格都无所谓,但是为了方便阅读通常情况下都加一个空格. 例如: //引用运行库内的A

[转]Delphi预编译指令总结

Delphi预编译指令总结 Delphi作为一个优秀的开发工具,这不仅是由于它开创了"构件 (Component)"时代,影响深远:另一个原因是它拥有非常出色的编译器,Borland(Inprise)公司宣称Delphi具有世界上最快的 编译器,如果你使用过Visual C++和Delphi你会明显体会到这一点.Delphi快速高效的编译器主要来自Object Pascal的严谨,使用Delphi随时都在和编译器交流,大部份情况下不需要我们干涉编译器的运行,但是有时也需要对编译器进行必

c语言中条件编译相关的预编译指令

一. 内容概述 本文主要介绍c语言中条件编译相关的预编译指令,包括#define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. 二.条件编译 条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段.可根据表达式的值或某个特定宏是否被定义来确定编译条件. 最常见的条件编译是防止重复包含头文件的宏,形式跟下面代码类似: 1 #ifndef ABCD_H 2 #define ABCD_H 3 4 // ... some declarat

C#中的预编译指令介绍

原文:C#中的预编译指令介绍 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量,但是它没有具体的值,可以将它看为一个符号而已.#undef就是删除这个符号的定义.如果符号DEBUG没定义过,则#undef不起作用,否则#define不起作用.二者都必须放在源代码之前.二者的顺序看代码的顺序: #define DEBUG #undef  DEBUG 这样的话,DEBUG是没有定

C语言的预编译,程序员必须懂的知识!【预编译指令】【预编译过程】

由“源代码”到“可执行文件”的过程包括四个步骤:预编译.编译.汇编.链接.所以,首先就应该清楚的首要问题就是:预编译只是对程序的文本起作用,换句话说就是,预编译阶段仅仅对源代码的单词进行变换,而不是对程序中的变量.函数等. 预编译指令的基本知识不作详细介绍,只稍作汇总,重点是后面的我能想到的 使用时的注意事项. 1. 基本内容 预编译指令基本分类如下 类别 指令 预定义符号__FILE__.__LINE__.__DATE__.__TIME__.__STDC__宏#define文件包含#inclu