Chinaunix首页 | 论坛 | 博客
  • 博客访问: 462720
  • 博文数量: 80
  • 博客积分: 2301
  • 博客等级: 大尉
  • 技术积分: 884
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-16 20:07
个人简介

I\'m interested in mathematics and Daoism. Welcome to talk about these subjects with me.

文章分类

全部博文(80)

文章存档

2017年(2)

2016年(16)

2015年(4)

2014年(6)

2013年(22)

2012年(2)

2011年(1)

2010年(4)

2009年(20)

2008年(2)

2007年(1)

我的朋友

分类: C/C++

2009-01-17 14:34:39

                            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) |
给主人留下些什么吧!~~

chinaunix网友2009-04-09 10:39:40

顶啊,希望能尽快更新啊