🔧 clang 是什么?
Clang 是一个 C / C++ / Objective-C 编译器,属于 LLVM 项目的一部分。
它的职责非常直接:
把 .c/.cpp 源码 编译成 .o 目标文件或者最终生成可执行文件
典型用法:
clang main.c -o main
它做的是“构建产物”。
你可以把它理解成:
clang = 真正负责“把代码变成机器能跑的东西”的引擎 🚀
🧠 clangd 是什么?
clangd 不是编译器。
它是一个 Language Server(语言服务器),实现了 LSP 协议。
它的作用是:
1、码补全
2、跳转定义
3、查找引用
4、实时语法检查
5、类型提示
6、重构支持
它通常被 VSCode、Vim、CLion 等编辑器调用。
比如在 VSCode 里安装 C/C++ 插件后,你敲代码时:
1、自动提示函数参数
2、trl+点击跳转定义
3、红线提示语法错误
背后大概率就是 clangd 在工作。
它不会生成可执行文件,它只负责“理解代码”。
你可以把它理解成:
clangd = 在你写代码时,实时帮你读代码的智能副驾驶 🧭
🆚 核心区别对比
对比点 clang clangd
类型 编译器 语言服务器
是否生成可执行文件 ✅ 是 ❌ 否
是否参与 IDE 智能提示 ❌ 不直接 ✅ 是
工作时机 编译时 写代码时
主要用途 构建项目 提高编码体验
🌰 举个真实场景
假设你在写 Linux 驱动:
你敲代码时,clangd 在后台帮你:
推断结构体类型
检查函数声明是否匹配
标红未定义符号
你执行 make 时:
真正参与编译的是 clang
换句话说:
clangd 是“思考工具”
clang 是“生产工具”
🔍 它们之间的关系
clangd 其实内部也会调用 clang 的解析能力。
可以理解成:
clangd = 把 clang 的语法分析能力
变成一个长期驻守的后台服务
它们共享前端解析器,但用途完全不同。
🧩 一句话总结
clang 负责让代码“跑起来”
clangd 负责让你“写得爽”

9336

被折叠的 条评论
为什么被折叠?



