运行环境:VSCode 1.121.0

你是否在 VSCode 中编写 C 语言代码时,发现鼠标悬停在函数上却没有显示注释提示?本文详细解析了 VSCode 函数悬停提示不显示的常见原因,重点讲解了注释的正确写法。通过对比错误与正确的代码示例,揭示了 /** 双星号开头、@ 与星号间空格、输入法选择等关键细节。文章还介绍了 @brief@param@return 等常用标签的规范用法,并提供了文件头部注释示例。无论你是 VSCode 新手还是遇到此问题的开发者,这篇指南都能帮你快速解决问题,提升编码效率。

概要

某天看到别人使用 VSCode 时,鼠标悬停在函数上就会自动弹出一个提示框。作为新手,我当时不知道如何实现这个功能。通过对比他人的函数代码,我最终解决了这个问题,在此记录下来,希望能帮助到同样遇到困惑的新手朋友。

效果图

提示:我的是 .c 文件,悬停的是 set_heart_beat(1) 这个函数

在这里插入图片描述
在这里插入图片描述

解决方法

  1. 在 VSCode 中管理鼠标悬停提示:在网上搜索 “vscode 鼠标没有悬停提示” 或 “vscode 鼠标悬停提示” 等关键词,就能找到大量相关设置文章。这是必须开启的步骤(不过一般情况下这个功能默认是开启的,我检查时发现自己的设置已经是开启状态)。由于通常默认开启,这里不再详细描述,遇到问题的用户可以自行搜索解决。

  2. 悬停提示的实现(我就是在这里卡住了,看着网上的文章设置都是正确的,但就是无法显示内容。最后发现是代码写错了)

错误的代码示例:

/// 启用或停用心跳机制。
/// @param flag 一个整数,非零值表示启用心跳机制,零值表示停用心跳
/// @return 返回一个整数,非零值表示成功启用或停用心跳机制,零值表示操作失败。
int set_heart_beat(int flag);

/* 启用或停用心跳机制。
* @param flag 一个整数,非零值表示启用心跳机制,零值表示停用心跳
* @return 返回一个整数,非零值表示成功启用或停用心跳机制,零值表示操作失败。
*/
int set_heart_beat(int flag);

以上两种注释,分别是单行和多行注释。由于函数注释和多行注释很相似,所以最初一直没有写对,导致提示无法显示。

正确的代码示例:

/** 启用或停用心跳机制。
* @param flag 一个整数,非零值表示启用心跳机制,零值表示停用心跳
* @return 返回一个整数,非零值表示成功启用或停用心跳机制,零值表示操作失败。
*/
int set_heart_beat(int flag);

在这里插入图片描述

根据实测,函数注释需要注意以下几点:

  1. 开头必须是 /**(有两个星号 *),否则无法自动弹出注释
  2. @* 之间需要一个空格,否则无法自动弹出注释(我这个版本没有空格也可以弹出,但加上空格更规范)
  3. @* 不能使用中文输入法输入,否则也无法自动弹出注释(我这个版本中文输入法也可以弹出,如果版本较低、设置和注释格式都正确,那就检查一下输入法)

常用的注释代码规范标签:

  • @brief:简介,简单介绍函数作用
  • @param:介绍函数参数
  • @return:函数返回类型说明
  • @exception NSException:可能抛出的异常
  • @author zhangsan:作者
  • @date 2011-07-27 22:30:00:时间
  • @version 1.0:版本
  • @property:属性介绍

其实函数注释就是文件头部注释的一种具体应用形式。文件头部注释位于文件顶部,提供文件的基本信息,如作者、创建日期、版本等,只是使用的标签略有不同。

/**
* @fileoverview 示例文件,用于演示文件头部注释。
* @author 张三
* @version 1.0.0
* @date 2024-01-01
* @license MIT
*/

最后补充一点,@ 后面的标签也可以使用中文:

/** @简介 示例文件,用于演示文件头部注释。
* @作者 张三
* @版本 1.0.0
* @时间 2024-01-01
*/

常见问题解答(Q&A)

以下是用户在使用 VSCode 函数悬停提示功能时可能遇到的其他典型问题及解答:

Q1:为什么我按照格式写了注释,但悬停提示内容不完整?

A: 这通常是因为注释内容过长或格式不规范导致的。VSCode 的悬停提示框有默认的显示限制。请检查以下几点:

  • 标签使用规范:确保 @param@return 等标签后都有明确的描述内容。
  • 换行与缩进:注释中的换行和缩进应保持一致,避免使用过多的空行。
  • 内容简洁:如果注释内容过长,可以适当精简,或使用 @brief 标签提供简短概述。
  • 扩展支持:某些语言扩展(如 C/C++ 扩展)可能对注释解析有特定要求,请确保扩展为最新版本。
Q2:除了 C 语言,其他语言(如 C++、Python)的注释格式一样吗?

A: 不完全一样,但原理相似。VSCode 的悬停提示功能依赖于对应语言的扩展和其支持的文档注释格式:

  • C/C++:通常使用 Doxygen 风格的 /** ... */ 注释,支持 @param@return 等标签。
  • Python:使用三引号 """ ... """ 文档字符串(docstring),遵循 PEP 257 规范。函数参数和返回值通常通过 :param:return 或类型注解来说明。
  • Java/JavaScript:也常用 /** ... */ 的 JSDoc 风格。
  • 关键:无论哪种语言,都需要确保安装了对应的语言扩展(如 Python 扩展、C/C++ 扩展),并且该扩展支持文档注释的悬停提示功能。
Q3:如何为结构体(struct)、枚举(enum)或宏定义(macro)添加悬停注释?

A: 为这些代码元素添加悬停注释的方法与函数类似,使用相同风格的文档注释即可。

结构体示例:

/**
 * @brief 表示一个二维坐标点
 * @struct Point
 * @var Point::x
 * 点的 X 坐标
 * @var Point::y
 * 点的 Y 坐标
 */
typedef struct {
    int x; /**< X 坐标 */
    int y; /**< Y 坐标 */
} Point;

枚举示例:

/**
 * @brief 操作状态枚举
 */
typedef enum {
    STATUS_OK = 0,    /**< 操作成功 */
    STATUS_ERROR = 1, /**< 操作失败 */
    STATUS_BUSY = 2   /**< 系统繁忙 */
} OperationStatus;

宏定义示例:

/**
 * @brief 计算数组长度的宏
 * @param a 数组名
 * @return 数组的元素个数
 */
#define ARRAY_LEN(a) (sizeof(a) / sizeof((a)[0]))

将鼠标悬停在 PointOperationStatusARRAY_LEN 上时,即可看到对应的注释提示。

Q4:悬停提示有时显示,有时不显示,是什么原因?

A: 这种间歇性问题可能由以下原因导致:

  1. VSCode IntelliSense 正在加载或更新:大型项目或首次打开文件时,语言服务器需要时间建立索引,请稍等片刻。
  2. 扩展冲突:某些扩展(特别是代码格式化、语法高亮类)可能影响悬停功能。尝试禁用其他扩展进行排查。
  3. 缓存问题:重启 VSCode 或执行 “Developer: Reload Window” 命令清除缓存。
  4. 文件未保存:部分语言特性(如悬停提示)仅在文件保存后完全生效。
  5. 工作区信任模式:如果工作区处于 “限制模式”,某些扩展功能可能被禁用。

如果问题持续,可以打开 VSCode 的输出面板(View > Output),选择对应的语言服务器(如 “C/C++”),查看是否有相关错误日志。

排查流程图

当 VSCode 函数悬停提示不显示时,可以按照以下流程图快速定位问题:

渲染错误: Mermaid 渲染失败: Parse error on line 3: ... B -->|已禁用| C[启用 "Editor > Hover: Enab... -----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'STR'

流程图使用说明:

  1. 起点:从 “VSCode 函数悬停提示不显示” 开始
  2. 排查顺序:按照箭头方向依次检查
  3. 决策点:菱形框表示需要判断的条件
  4. 操作步骤:矩形框表示具体的操作
  5. 结果:圆形框表示最终状态

关键检查点:

  • VSCode 设置:首先确认悬停功能是否启用
  • 注释格式:检查是否使用 /** 开头,@* 间是否有空格
  • 输入法:确保编写注释时使用英文输入法
  • 版本与扩展:最后考虑 VSCode 版本和插件兼容性问题

按照此流程图逐步排查,大多数悬停提示问题都能快速定位并解决。

更多推荐