所謂預編譯,就是程序代碼在編譯以前,開發工具爲咱們預先作的一些工做。不要小瞧這些指令,沒有它們,咱們的代碼可能步履維艱。函數
#include <header>工具
#include "header"開發工具
C語言中使用的包含文件的指令""和<>的區別爲,""是從當前目錄開始尋找文件,<>是從系統庫中尋找文件。這兩個指令不能使頭文件循環引入,也不能重複包含同一個頭文件。spa
#import "header"開發
#import <header>編譯器
這兩個指令和上面兩個做用同樣,只是更加智能,智能處理重複包含頭文件的問題。博客
#include_next "header"編譯
#include_next <header>效率
這兩個指令是C中的指令,OC也支持,只是不多使用,它的做用是在找到名字匹配的頭文件後跳過,尋找下一個相同名字的導入。import
宏定義是開發中會常常用到的一個指令了,咱們還會將許多簡單的函數定義爲宏,省去系統壓棧的時間,提升代碼效率。由於這篇博客的主題是預處理命令,因此宏的用法和高級用法就再也不多寫了,下次再討論。
#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("信息")
編譯時提示信息
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592