clang中文内幕手册
本中文手册部分内容源自英语手册,部分内容为本人自己阅读源代码所知。随着我的学习,我会及时更新本文章。
导论
clang-c类语言前端。本文档描述了的它一些重要的api以及内部设置决策。这是给那些想在clang上hack的人准备的,不是给最终用户准备的。下面按照不同库分别描述。如同llvm项目,clang项目也是使用c++语言编写的跨越多个操作系统、多个硬件处理器的项目。
llvm的System与Suppor库
llvm的libsystem库给clang提供了最基本的抽象层,它给命名空间llvm引入了子命名空间sys,它提供了如下功能:
1) 定时器(Alarm.h/Alarm.cpp)
2) 与外部反汇编库的胶合层(Disassembler.h/Disassembler.cpp)
3) 跨越多个操作系统平台的共享库的处理(DynamicLibrary.h/DynamicLibrary.cpp)
4) 本地主机信息的查询(是大端机器还是小端机器,操作系统种类及本版,Host.h/Host.cpp)
5) 内存管理(获取带有读、写、执行不同权限组合的内存区域,Memory.h/Memory.cpp)
6) 操作当前正在运行的进程(Process.h/Process.cpp)
7) 互斥锁(Mutex.h/Mutex.cpp)
8) 路径名管理(路径分割符、文件类型判定等,Path.h/Path.cpp)
9) 信号处理(Signals.h/Signals.cpp)
10) 日期时间管理(TimeValue.h/TimeValue.cpp)
括号内著名了实现该功能的.cpp文件的名字与接口头文件的名字
libsupport提供了很多底层库与各种数据结构:
1)命令选项处理(CommandLine.h/CommandLine.cpp),参见llvm/docs/CommandGuide/index.html
2)容器
3)任意精度整数(APInt.h/APInt.cpp)
clang的Basic库
源代码在目录clang/lib/Basic下,下面按照类的依赖关系,我们描述各个类的作用
侦错子系统
对于编译器怎样与人进行交互,clang的侦错子系统很了很重要的作用.“侦错”就是指当编译器发现了代码中错误,或者发现了疑似错误的时候,产生错误或者警告信息。一个侦错信息的代表例子:
t.c:38:15: error: invalid operands to binary expression ('int *' and '_Complex float')
P = (P-42) + Gamma*4;
DiagnosticKinds.def文件
它在这里clang/include/clang/Basic/DiagnosticKinds.def
在文件clang/lib/Basic/Diagnostic.cpp里定义了所有侦错的类型
enum {
NOTE = 0x01,
WARNING = 0x02,
EXTENSION = 0x03,
EXTWARN = 0x04,
ERROR = 0x05,
class_mask = 0x07
};
阅读(7348) | 评论(1) | 转发(0) |