亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

IOS預處理語句

2019-11-14 18:37:39
字體:
來源:轉載
供稿:網友

  程序中的源代碼計算機是無法識別的,需要將寫好的代碼轉成0、1二進制代碼,計算機才能識別。將源代碼轉成二進制代碼的需要經過兩步,編譯和鏈接。編譯是通過編譯器將每個文件的代碼都轉為二進制代碼,在這個過程中,如果有語法錯誤,會有編譯失敗的提示,如果成功,那么會生成對應多個目標文件。在一個文件中可能會用到其他文件,因此,還需要將編譯生成的目標文件和系統提供的文件組合到一起,這個過程就是鏈接。經過鏈接,最后生成了可執行文件。

  通常人們所理解的程序運行就是編譯和鏈接兩個階段,但實際上在編譯之前預處理器要進行預處理操作,處理完之后才進入到編譯階段。因為預處理指令是在編譯之前就行進了,所以它比程序運行時進行操作的效率高。

  預處理程序實際上是在分析程序前先處理的語句,它可以識別散步在程序中的特定語句。所有的預處理語句都使用井號(#)開頭,這個符號必須是一行中的第一個非空字符。

  預處理語句可以大概劃分成三類:文件包含、宏定義和條件編譯,下面,就一一來講解。

文件包含

  文件包含指的是在當前文件中用到其他文件中的函數或方法或者是其他信息時,可以將其他文件的頭文件包含進來,然后再當前文件中使用,文件包含一般放到文件的開頭位置。

  如果使用C語言編程,文件包含是#include<> 或者 #include“”。如果使用Objective-C語言,文件包含為#import<>或者#import“”。#include與#import最大的區別是#import在導入文件的時候進行了去重復檢查。此外,“”和<>兩個也是有區別的,“”是用來放自己寫的文件,<>用來放系統文件。程序在執行的時候,會根據你寫的樣式,優先去尋找對應類型的文件。比如<>,會先去找系統的文件,如果找不到,再去找自定義的文件。所以,正確的選擇樣式,能夠提高程序的運行效率。

  在使用文件包含的時候,會遇到A文件中用到B文件,B文件中用到A文件,這種相互使用包含的關系,這種情況就有點像死循環了,要使用A文件,必須要先有B,可是在B中,又需要先有A,因此在運行的時候,會出現錯誤。解決這個問題最好的辦法,是用@class代替文件包含,@class就是表明有這個類,等在源文件中真正用到的時候再包含文件。

  代碼:

//  A.h//  Test////  Created by jerei on 15-7-24.//  Copyright (c) 2015年 jerehedu. All rights reserved.//#import <Foundation/Foundation.h>@class B;@interface A : NSObject@PRoperty (nonatomic, strong) B *obj;@end////  B.h//  Test////  Created by jerei on 15-7-24.//  Copyright (c) 2015年 jerehedu. All rights reserved.//#import <Foundation/Foundation.h>@class A;@interface B : NSObject@property (nonatomic, strong) A *obj;@end

宏定義

  在程序中,有一些常量或者簡短的函數是會多次重復使用的,對于這些常用的數據,我們可以使用宏定義。使用宏定義可以快速的完成程序中多處的配置,最大的好處是只要修改宏定義的值,所有使用宏定義的值都會發生改變。此外,宏定義是在程序編譯之前進行替換和設置,比定義成全局變量或函數的效率要高。

  宏定義是通過#define來實現的,一般寫在程序的文件包含的下面。宏名通常用全部的大寫字母表示。下面,就通過代碼舉來看一下宏定義的使用。

代碼:

//  main.m//  Test////  Created by jerei on 15-7-24.//  Copyright (c) 2015年 jerehedu. All rights reserved.//#import <Foundation/Foundation.h>#define JR_PI 3.14#define JR_MAX(a,b) ((a>b)?(a):(b)) //得到兩個數中較大值#define JR_SQUARE_1(n) n*n  //求數字的平方#define JR_SQUARE_2(n) (n)*(n) //求數字的平方#define JR_HELLO @"hello world";int main(int argc, const char * argv[]) {    @autoreleasepool {                int num1 = JR_MAX(1, 2);        NSLog(@"max = %i",num1);        //結果: max = 2                int num2 = JR_SQUARE_1(2);        NSLog(@"2的平方 = %i",num2);        //結果:2的平方 = 4                int num3 = JR_SQUARE_1(2+1);        NSLog(@"(2+1)的平方 = %i",num3);        //結果:(2+1)的平方 = 5               int num4 = JR_SQUARE_2(2+1);        NSLog(@"(2+1)的平方 = %i",num4);        //結果:(2+1)的平方 = 9    }    return 0;}

  在代碼中可以看到,同樣都是求一個數的平方,但是兩個宏定義得到的結果卻是不一樣的。第一個計算2+1的平方的時候是2+1*2+1,所以結果為5,答案錯誤。因此,在寫宏定義,帶參數的時候,需要設置小括號,保證正確性。

條件編譯

  條件編譯其實就在編譯之前由預處理器來根據預處理語句進行判斷,如果滿足條件,就編譯滿足條件下面的代碼段,如果不滿足條件,下面的代碼段就不進入編譯環節。

  條件編譯主要分為兩種,一種是判斷是否定義過某個宏,根據是否定義過這個宏,來決定是否編譯某段代碼。另外,還有一組語句和條件結構中的階梯if結構非常類似,但是寫法上有所區別,是#if、#elif、#else、#endif組成。需要注意的是,無論哪種,都要有#endif結束標志。此外,最重要的一點是,條件編譯中的條件不能使用普通的變量,一般會選擇使用宏定義。

代碼: 

//  main.m//  Test////  Created by jerei on 15-7-24.//  Copyright (c) 2015年 jerehedu. All rights reserved.//#import <Foundation/Foundation.h>#define JR_COUNT 10int main(int argc, const char * argv[]) {    @autoreleasepool {        #if defined(JR_COUNT)        NSLog(@"定義了 COUNT 這個宏");#endif        #if defined(JR_MAX)        NSLog(@"沒有定義了 JR_MAX 這個宏");#endif        #if JR_COUNT==1        NSLog(@"JR_COUNT=1");#elif JR_COUNT==2        NSLog(@"JR_COUNT=2");#elif JR_COUNT==3        NSLog(@"JR_COUNT=3");#else         NSLog(@"JR_COUNT=%i",JR_COUNT);#endif            }    return 0;}

 

  疑問咨詢或技術交流,請加入官方QQ群:JRedu技術交流 (452379712)

 

作者:杰瑞教育
出處:http://www.49028c.com/jerehedu/ 
本文版權歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产日韩视频| 亚洲最新av在线| 欧美国产日本高清在线| 日韩电影在线观看中文字幕| 国产精品入口夜色视频大尺度| 最近2019中文字幕第三页视频| 久久久噜久噜久久综合| 在线电影欧美日韩一区二区私密| 日av在线播放中文不卡| 91久久久久久国产精品| 久久久久久91香蕉国产| 一区二区三区回区在观看免费视频| 国产亚洲精品久久久久动| 日韩有码视频在线| 中文字幕日韩在线播放| 午夜精品蜜臀一区二区三区免费| 国产成一区二区| 国产91精品久久久| 欧美一二三视频| 久久久黄色av| 中文字幕欧美视频在线| 国产成人精品免高潮在线观看| 国产精品h在线观看| 在线播放国产一区中文字幕剧情欧美| 国产人妖伪娘一区91| 北条麻妃一区二区在线观看| 日韩欧美极品在线观看| 亚洲一二三在线| 精品夜色国产国偷在线| 国产精品三级久久久久久电影| 欧美在线免费视频| 国产精品久久色| 亚洲精品一区久久久久久| 91po在线观看91精品国产性色| 亚洲欧美在线x视频| 亚洲自拍偷拍色片视频| 91国内揄拍国内精品对白| 亚洲天堂色网站| 欧美激情国产日韩精品一区18| 国产精品国产自产拍高清av水多| 久久91精品国产| 亚洲a∨日韩av高清在线观看| 欧美精品999| 国产精品久久久久久久久久久久| 国产成人高潮免费观看精品| 国产日韩欧美电影在线观看| 亚洲热线99精品视频| 国产亚洲在线播放| 欧美疯狂做受xxxx高潮| 91久久精品国产91性色| 久久精品成人动漫| 欧美成人第一页| 欧美性感美女h网站在线观看免费| 国产精品久久久| 亚洲一品av免费观看| 久久久免费精品| 欲色天天网综合久久| 在线观看日韩av| 日本伊人精品一区二区三区介绍| 国产精品男女猛烈高潮激情| 久久久精品免费视频| 欧美电影在线免费观看网站| 91久久精品久久国产性色也91| 国产成人久久久精品一区| 欧美美女操人视频| 综合网中文字幕| 最近2019年好看中文字幕视频| 国产精品成久久久久三级| 青草青草久热精品视频在线观看| 久久久国产精彩视频美女艺术照福利| 欧美激情精品久久久久久变态| 欧美激情三级免费| 高清视频欧美一级| 国产97在线|日韩| 精品国产91久久久| 欧美精品精品精品精品免费| 欧美激情性做爰免费视频| 欧美一区二三区| 国产精品视频久久久久| 久久艳片www.17c.com| 有码中文亚洲精品| 第一福利永久视频精品| 久久精品成人欧美大片古装| 精品国产精品自拍| 亚洲成人免费在线视频| 亚洲情综合五月天| 亚洲国产精品字幕| 久久的精品视频| 欧美亚洲成人精品| 欧美日韩999| 黄色91在线观看| 曰本色欧美视频在线| 久久久久女教师免费一区| 久青草国产97香蕉在线视频| 91色视频在线观看| 欧美疯狂性受xxxxx另类| 国产成人精品优优av| 久久久久亚洲精品国产| 国产精品视频中文字幕91| 欧美精品国产精品日韩精品| 亚洲精品在线观看www| 亚洲人成在线观看| 亚洲字幕一区二区| 国产中文字幕日韩| 欧美丝袜第一区| 欧美巨大黑人极品精男| 日韩欧美综合在线视频| 久久影视电视剧免费网站清宫辞电视| 亚洲香蕉成视频在线观看| 国产精品久久久久久亚洲影视| 国产女人精品视频| 欧美大尺度在线观看| 精品久久久视频| 欧美一区在线直播| 91色视频在线观看| 日韩欧美中文在线| 国产小视频国产精品| 久久久久国产一区二区三区| 国产精品久久久久久久久久久久久久| 欧美日韩在线另类| 欧美中文字幕视频| 欧美精品久久久久久久| 欧美国产日韩免费| 中文字幕亚洲一区二区三区| 亚洲а∨天堂久久精品喷水| 国产在线观看不卡| 亚洲午夜未满十八勿入免费观看全集| 68精品国产免费久久久久久婷婷| 亚洲a在线播放| 欧美高清videos高潮hd| 日韩精品中文字幕在线播放| 亚洲成人精品视频在线观看| 精品视频在线播放免| 在线观看日韩av| 亚洲成人av片| www欧美xxxx| 在线a欧美视频| 国产精品久久久久久婷婷天堂| 美女黄色丝袜一区| 欧美性猛交xxxx偷拍洗澡| 欧美日韩一区二区在线播放| 国产精品欧美一区二区三区奶水| 亚洲a∨日韩av高清在线观看| 国产成人精品优优av| www.亚洲一二| 伊人亚洲福利一区二区三区| 亚洲男人的天堂在线播放| 欧洲午夜精品久久久| 欧美主播福利视频| 久久天天躁狠狠躁老女人| 8x海外华人永久免费日韩内陆视频| 欧美精品电影在线| 5566日本婷婷色中文字幕97| 日本不卡免费高清视频| 成人国内精品久久久久一区| 国产精品欧美亚洲777777| 麻豆国产va免费精品高清在线| 日韩亚洲综合在线| 精品亚洲一区二区三区四区五区| 日韩av电影手机在线观看| 精品久久久999| 欧美日韩激情视频8区| 欧美激情免费观看| 成人亲热视频网站|