#define和預處理指令總結

宏即 替換!在預處理階段展開,僅展開,不作任何類型檢查。

#空指令,沒有任何效果

#include 包含一個源代碼文件

#include_next   與#include相似, 但它有着特殊的用途

#define 定義宏

#undef  取消宏的定義

#undef 取消定義宏

#if 如果條件爲真,則編譯下面的代碼

#elif  若#if, #ifdef, #ifndef或前面的#elif條件不滿足, 則執行#elif之後的語句, 相當於C語法中的else-if

#else   與#if, #ifdef, #ifndef對應, 若這些條件不滿足, 則執行#else之後的語句, 相當於C語法中的else

#endif    #if, #ifdef, #ifndef這些條件命令的結束標誌.

#ifdef 如果已經定義了某個宏,則編譯下面的代碼

#ifndef 如果沒有定義某個宏,則編譯下面的代碼

#error 停止編譯並顯示錯誤信息

#line     標誌該語句所在的行號

#       將宏參數替代爲以參數值爲內容的字符竄常量

##     將兩個相鄰的標記(token)連接爲一個單獨的標記

#pragma     說明編譯器信息#warning       顯示編譯警告信息

#error         顯示編譯錯誤信息


例: #ifdef kShowButton  //如果此宏已定義 則執行

    [self.view addSubview:btn];

#endif


下面列舉一些常用宏定義:

#define kScreenWidth  [UIScreen mainScreen].bounds.size.width

#define kScreenHeight  [UIScreen mainScreen].bounds.size.height

//內存管理的安全釋放   #define SAFE_RELEASE(x)  x=nil  

//判斷系統版本是否大於等於ios8         

#define IOS_VERSION_7_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)? (YES):(NO))


//判斷是否是ARC

//ARC

#if __has_feature(objc_arc)

    //是用arc編碼

#else

    //是用手動內存管理

#endif

//判斷是iPhone真機(Device)還是模擬器(Simulator)

#if TARGET_OS_IPHONE

    //針對真機進行編碼

    NSLog(@"iPhone Device");


#elif TARGET_IPHONE_SIMULATOR


    //針對模擬器編碼

    NSLog(@"iPhone Simulator");


#endif


//使用地區文字

#define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])

關於NSLocale 想了解的參考:http://my.oschina.net/hmj/blog/126355

http://blog.csdn.net/mamong/article/details/27077827

//GCD

#define BACK(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
#define MAIN(block) dispatch_async(dispatch_get_main_queue(),block)

//userDefault
#define USER_DEFAULT [NSUserDefaults standardUserDefaults]

//設置圖片
#define ImageNamed(_pointer) [UIImage imageNamed:[UIUtil imageName:_pointer]] 

//隨機顏色及透明度
#define RGBACOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]

//登錄API
#define APILogin [APIURL stringByAppendingString:@"Login"] 


詳細分類常用宏定義:http://my.oschina.net/leejan97/blog/354904

const常量與宏定義的區別:http://blog.csdn.net/love_gaohz/article/details/7567856

多用類型常量,少用宏預處理:http://book.51cto.com/art/201403/432132.htm

參考:http://my.oschina.net/leejan97/blog/224011

http://blog.csdn.net/wangqiuyun/article/details/8104698

http://www.cocoachina.com/industry/20140122/7738.html






發佈了53 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章