【注】本文是个人学习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;
}
- 编译,目录下面会生成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的使用简单方便,值得我们学习.