簡體   English   中英

Visual Studio Code 的 C/C++ 擴展“變量”u8“不是類型名稱”

[英]C/C++ extension for Visual Studio Code “variable ”u8“” is not a type name”

我正在將 VS Code 用於嵌入式 C 項目,並帶有 Microsoft 的 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 ,效果也很好。

我發現了這一點,當我自己嘗試這四個班輪時:

typedef unsigned char u8;
typedef unsigned short u16;
u8 testVar8;
u16 testVar16;

我沒有得到錯誤,所以開始讓我更加困惑。

在寫這個問題時,我回到了 VS Code window 只是為了注意到所有的紅色下划線和所有的錯誤都消失了,但是當我打開 VS Code 時,我遇到了同樣的問題。

在 ISO C 標准和 VS u8中是string literals之一,但您可以通過 header 訪問它們,可能locale.h包含在string中。 有關這些的 MS 文檔在這里

不建議使用這么短的 id,最好通過固定長度類型定義類型

您的代碼仍將編譯。 只是從C11開始, u8后面跟一個帶引號的字符串表示后面的字符串是用UTF-8編碼的。 還有其他的: UL特別有害,因為您可以看到它們在優化代碼中被用作上下,特別是從 FORTRAN 轉換而來的代碼。 順便說一句,這不是語言的重大變化。

這里唯一真正的問題是 MSVC 中的語法高亮顯示使用與實際編譯器不同的工具集,雖然它是一個令人印象深刻的工具包,但它並不完美。

就我個人而言,我會將您的 typedef 更改為

typedef uint16_t u16;
typedef volatile unsigned long uint32_t vu32;

以期完全刪除所有這些(是的,我知道目前這不是一種選擇,但您作為程序員的工作之一就是影響)。 目前需要調整最終的typedef以在典型的 Unix 工具集上正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2025 STACKOOM.COM