iOS Clang編譯器的使用

2021-08-14 20:15:35 字數 1293 閱讀 7198

ios 開發中 objective-c 和 swift 都用的是 clang / llvm 來編譯的。llvm是乙個模組化和可重用的編譯器和工具鏈技術的集合,clang 是 llvm 的子專案,是 c,c++ 和 objective-c 編譯器,目的是提供驚人的快速編譯,比 gcc 快3倍,其中的 clang static analyzer 主要是進行語法分析,語義分析和生成中間**,當然這個過程會對**進行檢查,出錯的和需要警告的會標註出來。llvm 核心庫提供乙個優化器,對流行的 cpu 做**生成支援。lld 是 clang / llvm 的內建鏈結器,clang 必須呼叫鏈結器來產生可執行檔案。

首先建立乙個測試專案 clangtest

然後建立乙個person類,在main.m檔案裡面alloc乙個person物件

int main(int argc, const

char * argv)

return

0;}

我做這一步的主要目的是想要看看,編譯器在編譯的時候把我的建立方法程式設計成麼樣子了。

我們開啟終端,輸入:

把這個資料夾拖到終端裡面,生成檔案路徑,回車

輸入命令:

clang -rewrite

-objc main.m

會在上面的資料夾下面生成乙個 main.cpp,我這裡只是以main.m檔案為例,你也可以clang別的檔案。

開啟 main.cpp 檔案,我們會看到幾萬行的**,很多哈,主要是link了好多別的庫。拉到最下面,我們會看到

int main(int argc, const

char * argv)

return

0;}

看到了嗎?我們建立 person 的 alloc , init 方法被編譯成c語言了,這個c語言語法我們是不是很熟悉呢,沒錯,就是在objc/message 框架中見到的。這就是我們oc的方法本質(訊息傳送機制):objc_msgsend(),所有的oc方法底層都是這個訊息傳送實現的。這裡面也會牽扯到runtime等好多有趣的東西,值的研究!!

GCC編譯器的使用

看下面的例子 test.c include main char str i like linux i advices you jion in the linux world printf s n str exit 0 使用gcc編譯 輸入gcc c test.c得到目標檔案test.o。c命令表示對...

GCC編譯器的使用

看下面的例子 test.c include main char str i like linux i advices you jion in the linux world printf s n str exit 0 使用gcc編譯 輸入gcc c test.c得到目標檔案test.o。c命令表示對...

GCC編譯器的使用

看下面的例子 test.c include main char str i like linux i advices you jion in the linux world printf s n str exit 0 使用gcc編譯 輸入gcc c test.c得到目標檔案test.o。c命令表示對...