Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>C/C++ Struct & Function Pointer HighlightNew to Visual Studio Code? Get it now.
C/C++ Struct & Function Pointer Highlight

C/C++ Struct & Function Pointer Highlight

AXU

| (0) | Free
为 C/C++ 结构体函数指针调用 (obj.func(...) / ptr->func(...)) 以及可选独立函数指针调用 (fp(...)) 提供金黄色函数高亮,不影响原生 IntelliSense。
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

C/C++ Struct & Function Pointer Highlight

解决 VS Code + 微软 C/C++ 扩展下,结构体函数指针调用无法显示为函数金黄色(#DCDCAA)而被渲染成普通变量色的问题。

本插件完全使用cline+deepseek v4 flash开发,源码已开源在 GitHub 仓库。

满足:

  • obj.func(...) / ptr->func(...) → func 显示为金黄色(函数色)。
  • obj.field / ptr->field(不带括号)→ 保持默认变量色,不受影响。
  • 宏(#define)、类型(typedef)、枚举等原生 IntelliSense 语义高亮完全不受影响。

为什么不用 Semantic Tokens Provider

VS Code 对同一文档只采用一个 Semantic Tokens Provider(语言特性注册中按 selector 命中第一个即生效)。

  • 若 IntelliSense(cpptools)先注册,第三方 Provider 不会被调用;
  • 若第三方先注册,则会顶掉 IntelliSense 的全部语义高亮(宏/类型/枚举失效)。

因此“再注册一个 Provider 把 function 叠加到 IntelliSense 之上”无法成立。本插件改用 TextEditorDecoration(装饰器),它渲染在语义 Token / TextMate 之上,能确定性覆盖函数名为金黄色,同时完全不触碰 IntelliSense。

代码中仍保留了 DocumentSemanticTokensProvider 实现(src/semanticProvider.ts),默认关闭(cppFuncPtr.enableSemanticTokens=false),仅供实验。

安装:code --install-extension cpp-funcptr-highlight-1.3.1.vsix 或在 VS Code 中 扩展 -> ... -> 从 VSIX 安装...。

设置项

设置 默认 说明
cppFuncPtr.highlightColor #DCDCAA 结构体成员函数指针调用的高亮颜色(Dark+ 函数金黄色)
cppFuncPtr.standaloneColor #DCDCAA 独立函数指针变量调用 (fp(...)) 的高亮颜色,可单独设置
cppFuncPtr.highlightMemberCalls true 结构体成员函数指针调用 (obj.func(...) / ptr->func(...)) 是否金色
cppFuncPtr.highlightStandaloneFnPtr false 独立声明的函数指针变量调用 (fp(...)) 是否金色(注意会覆盖普通函数/宏调用色)
cppFuncPtr.enableSemanticTokens false 是否注册语义 Token Provider(可能与 IntelliSense 互斥)

测试

打开 src/test/sample.c,观察 angle_read(...) 为金黄色、port.angle/io.speed/id 保持默认色、宏/注释/字符串内文本不被误标。

⚠️ 一个必须说明的语法局限

开启 highlightStandaloneFnPtr 后,普通函数调用也会被命中(如 void fn(...) 的 fn)。因为纯文本里 fn( 和函数指针 fp( 无法区分——要区分必须拿到符号表(cpptools 语义),而那会与 IntelliSense 互斥,不可行。当 standaloneColor 保持默认金色 #DCDCAA 时无任何视觉影响(普通函数本来就是金色);若你把 standaloneColor 设成别的颜色,普通函数调用也会跟着变色。请知悉这一点再决定是否开启。

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft