在Object-C中預處理不是編譯器的一部分,而是編譯過程中的一個單獨步驟。簡單說只是一個文本替換工具,我們將Object-C預處理成爲稱爲OCCPP
用其他語言的思想來表示ObjectC的預處理即導包,大致方向是這樣,但還是有一些出入的。
預處理:
預處理以井號(#
)開頭,前面不能有空格,且從第一列開始。
以下是一些常見的預處理指令。
例子:
示例1:
#define MAX_ARRAY_LENGTH 20
這時候像一個常量:指令告訴OCPP用20
替換MAX_ARRAY_LENGTH
,使用#define
提高代碼可讀性
示例2:
#import <Foundation/Foundation.h>
#include "myheader.h"
指令告訴OCPP從Foundation Framework中獲取foundation.h
,並將文本添加到當前源文件中。#include "myheader.h"
告訴OCPP從本地目錄獲取myheader.h
,並將內容添加到當前源文件中。
示例3:
#undef FILE_SIZE
#define FILE_SIZE 42
將現有的FILE_SIZE
取消,並將FILE_SIZE
定義爲42
預定義的宏
這裏主要提及的是系統內置的宏,不可修改預定義的宏。
#import <Foundation/Foundation.h>
int main(){
NSLog(@"File %s",__FILE__);
NSLog(@"Date %s",__DATE__);
NSLog(@"Time %s",__TIME__);
NSLog(@"Line %s",__LINE__);
}
字符串化(#)
可將宏參數轉換爲字符串常量
#import <Foundation/Foundation.h>
#define message_for(a,b)
NSLog(@#a "and" #b ": We love you!")
int main(void){
message_for(Carole,Debra);
return 0;
}
以上就是學習的預處理,若想深入還需實踐。
更多課程請訪問個人主頁:
公衆號: