<p>C++单行注释唯一合法写法是//,块注释只能用/ /且不支持嵌套;Doxygen风格注释(///、/* /)非语言特性但影响文档生成;注释需注意编码、预处理及工具链兼容性。</p>

单行注释用 //,别碰 #
单行注释唯一合法写法是 //,后面跟任意内容直到行尾。C++ 不支持 # 开头的注释(那是 Shell/Python 的习惯),写了会直接报错:error: expected unqualified-id。
常见错误现象:复制 Python 脚本里的 #include <iostream> 注释风格,结果编译失败;或者在宏定义后误加 # 注释,导致预处理器把整行吞掉。
-
//可以出现在行首,也可以跟在语句后面:int x = 42; // 初始化值 - 不要在字符串字面量里用
//,它不会被忽略:std::string s = "a//b";中的//就是普通字符 - 预处理指令后不能直接跟
//(中间至少一个空格或换行),否则可能被当作指令一部分
多行注释必须用 /* */,嵌套不合法
/* */ 是 C++ 唯一的块注释语法,从 /* 开始,到最近的 */ 结束。它不支持嵌套——这是最常踩的坑。
使用场景:临时屏蔽一段含 // 的代码、注释掉大段调试逻辑、写函数说明头部。
立即学习“C++免费学习笔记(深入)”;
- 写
/* /* inner */ outer */会导致编译器只认第一个*/,后面内容全变未注释,大概率语法错误 -
/*可以跨行,但不能跨字符串或字符字面量边界:"/*"里的/*不触发注释 - 如果注释里不小心漏了
*/,编译器会一路吃到文件末尾甚至下一个文件(尤其头文件被多次包含时),报一堆“unexpected token”
Doxygen 风格注释不是语言特性,但影响生成文档
/// 和 /** */ 是 Doxygen 约定,不是 C++ 标准语法。它们本身只是普通单行/块注释,但 Doxygen 工具能识别其中的 @param、@return 等标签生成 API 文档。
关键点在于:这些符号对编译器完全透明,但写错格式会让 Doxygen 漏解析。
- 函数声明前用
///或/** */才会被 Doxygen 捕获,写在函数体内无效 -
/** */中第一行的*和后续行对齐与否不影响编译,但 Doxygen 推荐统一缩进 - 别混用:
/// @brief和/* @brief */都行,但// @brief(单斜杠无空格)Doxygen 不识别
注释里出现 \、
或 Unicode 可能引发意外
注释内容虽不参与编译,但若含反斜杠续行或换行符,在某些老旧编译器或预处理器阶段可能被误处理;Unicode 注释则涉及源文件编码设置。
实际影响集中在跨平台协作和构建系统中。
-
// 这里有个反斜杠\ 下一行:部分编译器会把\当作续行,导致注释“泄漏”到下一行 - 含中文的注释必须保存为 UTF-8 无 BOM,否则 MSVC 可能显示乱码,Clang/GCC 则通常容忍
- 避免在注释里写未转义的 HTML 实体或 XML 符号(如
<),虽然不报错,但可能干扰文档生成工具或 IDE 预览
注释不是写完就完的事——它得和代码一起被编辑、被搜索、被 IDE 折叠、被文档工具读取。最容易被忽略的是注释边界与预处理、编码、工具链之间的隐式耦合,而不是语法本身。










