【发布时间】:2020-05-27 05:17:22
【问题描述】:
我正在将 VS Code 用于 Microsoft 的 C/C++ 扩展的嵌入式 C 项目。我有一个给定的类型命名方案,我不负责也无法更改任何内容。
要使用我的名字,例如typedefs
typedef unsigned char u8;
typedef signed char s8;
typedef unsigned short u16;
typedef volatile unsigned long vu32;
当在任何地方使用u8 类型时(即使在 typedef 之后的行中),它不会突出显示作为类型名,而 确实会在 typedef 行中突出显示 本身。它被标记为 en error 并带有以下错误消息:
"Variable "u8"" is not a type name.
所有其他类型都可以正常工作。
这似乎不是长度问题,因为s8 类型有效。我尝试将其更改为u7,这样它不应该是开头的“u”,我尝试添加一个像这样的字母:u8e,效果也很好。
我找到了this,当我自己尝试这四个班轮时:
typedef unsigned char u8;
typedef unsigned short u16;
u8 testVar8;
u16 testVar16;
我没有得到错误,所以开始让我更加困惑。
在写这个问题时,我回到了 VS Code 窗口,只是注意到所有红色下划线和所有错误都消失了,但是当我接下来打开 VS Code 时,我遇到了同样的问题。
【问题讨论】:
-
您遇到的是 VS Code 问题,而不是 C/C++ 问题。您的 typedef 没有任何问题,所以我怀疑您在 typedef 行上方有一个问题,导致语法高亮显示关闭。
-
@DavidC.Rankin u8 是标准字符串文字的 id,他调用了 UB,有点。
-
嗯,是的,也不是。
u8文字说明符类似于数字值的U或UL后缀,它不是左值问题,也不会影响 typedef 标记空间。 C11 Standard - 6.4.5 String literals -
在玩弄并将所有内容更改为固定长度的 stdint.h confom 类型之后,结果发现 vs code semms 有一个完全不同的问题,因为它也不喜欢 uint8_t。它可能必须对使用该类型的 typedef 位结构做一些事情。
标签: c++ c visual-studio-code