doxygen 默认不生成有效文档,需规范注释格式(///或/* /紧贴声明)、正确配置doxyfile(如input、recursive、extract_all等)、手动标注@param/@return、统一utf-8编码且无bom。

Doxygen 能直接解析 C++ 源码生成文档,但默认配置下几乎不产出有效内容——关键在注释格式、配置文件和符号提取方式。
Doxygen 识别不了你的 C++ 函数?检查注释是否用 /// 或 /** */ 且紧贴声明
Doxygen 默认只扫描紧邻函数/类/变量声明上方的注释块。如果注释和声明之间有空行、宏、或前置声明,doxygen 就会跳过它。
-
///必须直接写在函数声明前一行(不能隔空行),支持单行简写 -
/** */块注释也必须紧贴,且推荐用/**<code> 开头(不是 <code>/*),否则可能被忽略 - 类成员函数若在
.cpp文件中定义(而非头文件),默认不会被索引——需开启EXTRACT_ALL = YES或显式标注@file - 模板类/函数要加
@tparam,否则参数名不会出现在生成的 HTML 中
运行 doxygen 命令没输出或报错?先用 doxygen -g 生成基础配置再改
手写 Doxyfile 容易漏关键项。直接执行 doxygen -g Doxyfile 生成默认配置,再针对性调整以下几项:
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
-
PROJECT_NAME和PROJECT_NUMBER:建议填实际项目名,避免生成路径混乱 -
INPUT:填头文件目录(如./include ./src),不要只写.,否则可能扫到构建目录 -
RECURSIVE = YES:否则子目录不被递归扫描 -
EXTRACT_ALL = NO(推荐)+EXTRACT_STATIC = YES:避免把内部工具函数全暴露,同时保留静态成员 -
GENERATE_HTML = YES和GENERATE_XML = NO:除非你要用第三方工具二次处理,否则关掉 XML 节省时间
生成的 HTML 里没有函数参数列表或返回值?确认用了 @param 和 @return 标签
Doxygen 不自动推导语义,int foo(int x) 不会自动生成 “x: input integer” —— 必须人工标注。
-
@param [in|out|in,out] name description:括号内方向是可选但强推荐的,影响生成文档的可读性 -
@return后跟类型说明,比如@return true on success,别只写@return bool - 重载函数需靠
@overload关联,否则各版本文档孤立显示 - 如果用了 C++20 concept,
@concept标签目前不被原生支持,得当普通文本写进注释
中文注释乱码或搜索失效?统一用 UTF-8 编码 + 设置 INPUT_ENCODING
Windows 上用记事本保存的 .h 文件常带 BOM 或 ANSI 编码,会导致 Doxygen 解析失败或注释截断。
- 所有源文件务必保存为
UTF-8 without BOM(VS Code / CLion 默认符合,记事本需另存为时手动选) - 在
Doxyfile中设INPUT_ENCODING = UTF-8,否则中文会被当作非法字符跳过 - 搜索功能(
SEARCHENGINE = YES)依赖 JavaScript,若浏览器禁用 JS 或生成路径含空格/中文,搜索框可能无响应 - 生成后打开
html/index.html,不要双击打开——用python3 -m http.server 8000起个本地服务更稳妥
最容易被忽略的是:Doxygen 对 C++ 模板特化、SFINAE、宏展开体的支持非常有限。遇到 std::enable_if_t 或 decltype(auto) 返回类型时,文档里大概率只显示 auto 或空白——这不是配置问题,是解析器能力边界。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










