#include #import @import 的區(qū)別

#include 和 #import

不同點(diǎn):在引用關(guān)系很復(fù)雜的時(shí)候,#include會(huì)產(chǎn)生重復(fù)引用帶來(lái)的編譯問(wèn)題。比如:B 和 C 都引用了A,D 又同時(shí)引用了B和C,這樣A中定義的東西就在D中被定義了兩次,重復(fù)了。 而#import會(huì)保證每個(gè)頭文件只會(huì)被引用一次。

共同點(diǎn):#include#import都是文本語(yǔ)義:預(yù)處理器在處理的時(shí)候會(huì)把這一行替換成相應(yīng)頭文件的文本,這種簡(jiǎn)單粗暴的替換會(huì)有很多問(wèn)題:

  • 大量的預(yù)處理消耗。假如有N個(gè)頭文件,每個(gè)頭文件又#include了M個(gè)頭文件,那么這個(gè)預(yù)處理的消耗就是N*M。
  • 文件導(dǎo)入后,宏定義容易出現(xiàn)問(wèn)題。因?yàn)槭俏谋緦?dǎo)入,并且按照include依次替換,當(dāng)一個(gè)頭文件定義了#define std hello_word,而另一個(gè)頭文件剛好是C++標(biāo)準(zhǔn)庫(kù),那么include順序不同,可能會(huì)導(dǎo)致所有的std 都會(huì)被替換。

@import

@import不再使用文本模型,而是采用更高效的語(yǔ)義模型。module會(huì)被作為一個(gè)獨(dú)立的模塊編譯,并且產(chǎn)生獨(dú)立的緩存。從而大幅度提高預(yù)處理效率,這樣時(shí)間消耗從 M*N 變成了M+N

參考文檔

https://juejin.im/post/5c22eaf1f265da611b5863b2#heading-11
https://onevcat.com/2013/06/new-in-xcode5-and-objc/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,715評(píng)論 0 5
  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類(lèi)型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 4,040評(píng)論 0 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,663評(píng)論 1 32
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,335評(píng)論 0 10
  • 【富士100-400mm F4.5-5.6長(zhǎng)焦鏡頭將于明年1月15日正式發(fā)布?!坑凶钚孪⒎Q(chēng),富士XF 100-4...
    相機(jī)Beta閱讀 541評(píng)論 0 0

友情鏈接更多精彩內(nèi)容