clang clang clang是一个以LLVM为后端的编译前端。编译前端主要负责parse源码、检查错误,并生成抽象语法树Abstract Syntax Tree (AST)。相较于其他编译器生成的AST,clang生成的AST更加接近C++源码,所以我们可以更加准确地在源码中进行查找和定位。并且,clang还提供了丰富的库和API,让我们能在AST上很方便地做遍历,搜索和修改等操作。 我们在vscode上用的代码自动补全工具clangd(或vim的YouCompleteMe)就是用clang来实现的。 一般什么时候会用到Clang: 需要基于编译器的AST对源码做精确的编辑:自动纠正不符合coding style的源码 需要引入自定义的编译错误和警告:禁止用裸指针创建共享指针,声明了变量但是没有使用 基于C/C++源码的代码生成(code generation):自动生成数据结构的序列化方法,反射方法 Clang AST Clang AST的节点是由几种没有共同基类的类来组成(建模)的,其中比较常用的四种class是Type, Decl, DeclContext, Stmt