C/C++ 代码审查封面

C/C++ 代码审查:编译器静态与动态分析工具实践

前言 作为 C/C++ 开发者,你手上最强大的代码审查工具不是某个第三方软件,而是你每天都在用的编译器本身。GCC 和 Clang 都内置了完整的静态分析和动态分析能力,零成本、零额外依赖。 本文聚焦两类工具: 静态分析(不运行程序):编译器警告、GCC -fanalyzer、Clang Static Analyzer (--analyze / scan-build)、clang-tidy 动态分析(运行程序时捕获问题):AddressSanitizer (ASan)、ThreadSanitizer (TSan)、MemorySanitizer (MSan)、UndefinedBehaviorSanitizer (UBSan) cppcheck、Valgrind 等第三方工具仅在文末作对比参考。 第一部分:静态分析(编译器自带) 1.1 编译器警告:零成本第一道防线 警告不是可选的,-Werror 是 CI 和本地开发的底线(发布构建可以酌情关闭,避免新编译器版本引入的新警告中断发布流程)。 推荐的最小警告集(GCC 和 Clang 通用) # 所有构建必开 -Wall -Wextra -Wpedantic -Werror # 推荐再加这些 # 注意:GCC 中 -Wconversion 不包含有符号/无符号隐式转换,需单独加 -Wsign-conversion # Clang 中 -Wconversion 默认包含两者 -Wshadow -Wconversion -Wsign-conversion -Wnull-dereference -Wformat=2 -Wundef -Wunused -Wcast-align -Wcast-qual -Wnon-virtual-dtor -Woverloaded-virtual -Wold-style-cast GCC 特有警告 选项 起始版本 说明 -Weffc++ 很早 Effective C++ 规则集 -Wstringop-overflow=4 GCC 11 字符串操作溢出(需 -O2 才触发,级别 1-4,数字越大越严格) -Wdangling-reference GCC 13 悬垂引用检测 -Wstrict-overflow=5 GCC 4.x 有符号整数溢出假设(需 -O2 才触发,级别 1-5) -Warray-bounds 很早 数组越界(需 -O2 才触发) Clang 特有警告 选项 说明 -Weverything 启用所有警告(不要在 CI 用,新警告会断构建) -Wno-c++98-compat 忽略 C++98 兼容性(现代项目通常不需要) -Wdocumentation Doxygen 文档注释格式检查 -Wthread-safety 线程安全注解检查(代码中需加注解) 1.2 GCC -fanalyzer:路径敏感静态分析 GCC 10 引入,GCC 11 完全重写。基于符号执行,能发现跨函数、跨路径的深度 Bug。 ...

2026-08-01 · 15 分钟 · 3012 字 · 博主
Shell 与命令行工具封面

计算机教育缺失的一课:1.Shell 与常用命令行工具

什么是 Shell Shell 是用户与操作系统内核之间的接口程序。当你在终端中输入命令时,Shell 会解析你的输入并调用相应的程序执行。 为什么要学习 Shell 场景 说明 自动化 编写脚本自动完成重复性任务 远程管理 SSH 远程连接服务器时只能使用命令行 效率 熟练使用命令行比图形界面更快 编程基础 理解文件系统、进程管理等概念 常见的 Shell Shell 说明 Bash Bourne Again Shell,最常用的 Shell Zsh Z Shell,功能更强大,兼容 Bash Fish Friendly Interactive Shell,语法更简单 文件系统操作 查看当前目录 pwd pwd -P # 显示物理路径(解析符号链接) pwd 是 print working directory 的缩写,显示当前所在的目录路径。 列出目录内容 ls ls -l # 详细列表 ls -la # 显示所有文件(包括隐藏文件) ls -lh # 显示文件大小(人类可读格式) ls -la /home/edward # 指定目录 ls -la --sort=size # 按大小排序 ls -la --sort=time # 按时间排序 示例输出: ...

2026-07-12 · 15 分钟 · 3030 字 · 博主
命令行环境封面

计算机教育缺失的一课:2.命令行环境

命令行环境概述 命令行环境不仅仅是输入命令的地方,它是一个强大的工作空间。通过合理配置命令行环境,可以极大提升工作效率。 什么是命令行环境 命令行环境包括: Shell 配置文件:定义环境的行为和外观 环境变量:存储系统级别的配置信息 别名和函数:自定义快捷命令 命令历史:记录之前执行的命令 作业控制:管理前台和后台进程 终端复用器:在单个终端中管理多个会话 Shell 配置文件 Bash 配置文件加载顺序详解 当 Bash 启动时,会按照以下顺序查找并加载配置文件: /etc/profile # 系统级配置(所有用户共享) ↓ ~/.bash_profile # 用户登录配置(优先) ↓ 如果不存在 ~/.bash_login # 备用登录配置 ↓ 如果不存在 ~/.profile # 备用登录配置(适用于多种 Shell) ↓ ~/.bashrc # 交互式非登录 Shell 配置 ↓ /etc/bash.bashrc # 系统级交互式配置 加载规则: 登录 Shell(如 ssh user@host、login 命令): 首先执行 /etc/profile(系统级) 然后依次查找 ~/.bash_profile → ~/.bash_login → ~/.profile,只执行第一个找到的 通常会在登录配置中通过 source ~/.bashrc 加载交互式配置 非登录 Shell(如终端窗口、直接输入 bash): 只执行 ~/.bashrc 脚本执行(如 bash script.sh): ...

2026-07-12 · 26 分钟 · 5389 字 · 博主
Hugo 搭建个人博客封面

Hugo 搭建个人博客

为什么选择 Hugo Hugo 是目前世界上最快的静态网站生成器,相比其他工具具有显著优势: Hugo 的核心优势 特性 说明 速度 构建速度极快,毫秒级完成 易用 无需安装复杂的依赖环境 Markdown 使用 Markdown 编写内容 主题丰富 上百款精美主题可选 完全免费 开源项目,无任何费用 与其他框架对比 构建速度对比(1000篇文章): - Hugo: ~1秒 ⚡⚡⚡⚡⚡ - Hexo: ~30秒 ⚡⚡ - Jekyll: ~60秒 ⚡ - Gatsby: ~120秒 为什么选择 PaperMod 主题 PaperMod 是一款备受好评的 Hugo 主题,特别适合技术博客: 主要特点 简洁美观:界面清爽,阅读体验极佳 响应式设计:完美适配手机、平板、电脑 暗色模式:支持自动切换明暗主题 SEO 友好:对搜索引擎优化友好 性能优异:加载速度快,轻量级 功能丰富:支持代码高亮、目录、标签、分类等 主题演示 # 主题配置文件示例 params: defaultTheme: auto # 自动切换明暗主题 author: 你的名字 description: 博客描述 本地快速搭建博客 本节详细介绍在 Windows 系统上从零搭建 Hugo 博客的完整步骤。 准备工作 1. 安装 Git Git 是版本管理工具,Hugo 主题管理依赖它。 ...

2026-06-20 · 7 分钟 · 1354 字 · 博主