iOS代碼運行的磨刀石-預編譯指令

iOS中代碼運行的磨刀石--預編譯指令

所謂預編譯,就是程序代碼在編譯以前,開發工具爲咱們預先作的一些工做。不要小瞧這些指令,沒有它們,咱們的代碼可能步履維艱。函數

1、文件包含相關預處理命令

 

#include <header>工具

#include "header"開發工具

C語言中使用的包含文件的指令""和<>的區別爲,""是從當前目錄開始尋找文件,<>是從系統庫中尋找文件。這兩個指令不能使頭文件循環引入,也不能重複包含同一個頭文件。spa

 

 

#import "header"開發

#import <header>編譯器

這兩個指令和上面兩個做用同樣,只是更加智能,智能處理重複包含頭文件的問題。博客

 

 

#include_next "header"編譯

#include_next <header>效率

這兩個指令是C中的指令,OC也支持,只是不多使用,它的做用是在找到名字匹配的頭文件後跳過,尋找下一個相同名字的導入。import

 

2、宏定義

宏定義是開發中會常常用到的一個指令了,咱們還會將許多簡單的函數定義爲宏,省去系統壓棧的時間,提升代碼效率。由於這篇博客的主題是預處理命令,因此宏的用法和高級用法就再也不多寫了,下次再討論。

 

#define 參數1 參數2

定義一個簡單的替換宏,不帶參數,在預編譯階段,會把全部參數1的地方直接替換爲參數2。 

 

#define ADD(x) (x+x)

定義一個帶參數的宏,相似帶參函數的功能,但也是編譯前作簡單替換。

 

3、條件編譯

條件編譯用於判斷一個表達式是否成立,成立則進入條件編譯。

方式一:

#if 表達式

#else 

#endif 

方式二:

#if 表達式

#elif 表達式

#endif

方式三:

 

#ifndef 

若是沒有定義一個宏進行編譯

#ifdef

若是定義一個宏進行編譯
 

4、錯誤,警告的預處理

 

#error 錯誤

當程序檢查到這裏時會中止編譯,這個命令的做用是在錯誤的地方禁止編譯。

 

#warning 警告

這個命令並不會影響程序的編譯和運行,可是會認爲的在這裏顯示一條警告信息,提醒咱們本身。

 

5、更改文件名和行號

在OC中,有一個系統的定義的宏:

__LINE__

這個宏表示當前行的行號,能夠打印。

 

#line number

改變當前行的行號,會影響下面全部的行

 

 

#line number "filename"

改變當前行號和編譯後的文件名

 

6、編譯器控制指令

#pragma 參數

這個預編譯指令是最複雜的,用於控制編譯器的行爲,通常咱們開發應用APP是不多用到的,經常使用的有兩種方式:

 

#pragma mark - 信息

爲代碼加上標註

 

#pragma message("信息")

編譯時提示信息

 

專一技術,熱愛生活,交流技術,也作朋友。

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索