【注】本文是個人學習clang時做的一些筆記和整理,分享一下僅供參考,文中多處摘自參考文章。
好想有個能千變萬化的編譯器,沒錯就是它,就是它. -----Clang
簡介
clang是一個c,c++、oc語言的輕量編譯器,源碼發布于BSD 協議下。
- 終端用戶特色
- 快速編譯和較少內存占用
- 有診斷功能
- 兼容gcc
一、查看oc中c語言的實現源碼
- 使用vim編輯器測試
- 打開vim 建立.c文件
vim test.c
- 寫入測試的代碼,下面測試代碼查看block的實現(輸入上面指令后,輸入“i”開始編輯,粘貼完后按“esc”鍵,輸入“:wq”,回車)
#include <stdio.h>
int main () {
void(^blk)(void) = ^{
printf("Block\n");
};
blk();
return 0;
}
vim file
- 編譯,目錄下面會生成a.out文件
gcc test.c
- 最后使用clang查看源碼,成功會生成test.cpp文件,里面就是源碼
clang -rewrite-objc test.c
生成文件
關于a.out的維基百科,我看不懂?? 嘗試用終端查看文件,一大堆亂碼。
test.cpp文件就是相關的c++實現
.cpp:只能編譯c++代碼,.mm是編譯c,oc,c++,.h是聲明,.m包含oc和c代碼的文件
二、編譯oc
- 同樣創建測試代碼文件,test.m
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"你好世界!");
}
return 0;
}
- 輸出可執行文件
clang -fobjc-arc -framework Foundation test.m -o outputname
可執行文件
執行結果
指令解釋
- -fobjc-arc表示編譯需要支持ARC特性
- -framework Foundation表示引用Foundation框架
- test.m是待編譯的源文件名
- -o outputname表示輸出可執行文件名是outputname
總結: Clang是一個C++編寫、基于LLVM、發布于LLVM BSD許可證下的C/C++/Objective-C/Objective-C++編譯器。它與GNU C語言規范幾乎完全兼容;同時Clang的使用簡單方便,值得我們學習.