[英]Visual Studio does not differentiate between C headers and C++ headers
我正在使用Visual Studio 2017-enterprise使用 C 語言,但是 C 頭文件存在一個復雜的問題,因為 Visual Studio 認為每個頭都是 C++ 頭。 因此,無論擴展名是.hpp
還是.h
,它都會將其視為 C++ 標頭,這會導致問題,因為我使用了 C99,Visual Studio 會認為標頭是 C++,因此我無法在頭文件中使用 C 功能.
注意:當我將源文件命名為.c
,Visual Studio 將其視為 C 文件,而不是 C++,這很好。 所以我需要對標題做同樣的事情。 我需要為 c 制作 .h,為 c++ 制作 .hpp 如何?
這個問題也存在於 VS 2010、2013、2015 中。
編輯::
突出顯示的問題,例如,如果我在 .c 文件中創建類,visula studio 會說有錯誤,但如果我在 .h 文件中創建類,即使我使用 extern"C" 也不會顯示任何錯誤
如果您從.c
文件#include
.h
文件,則 Visual Studio 會將其編譯為 C。如果您#include
來自.cpp
文件的.h
文件,則 Visual Studio 會將其編譯為 C++。
在特定於 C 的標頭中執行此操作是很常見的:
#ifdef __cplusplus
extern "C" {
#endif
void MyCFunction();
void MyCFunction2();
#ifdef __cplusplus
}
#endif
這允許您聲明在 C 中實現的函數。其他 C 源可以使用這些函數,而 C++ 源可以使用這些函數。
你真的不需要擔心 C++ 特定的頭文件,因為如果你在 C 源代碼中#include
它們,你只會得到編譯錯誤。
據我了解,您遇到的問題是您正在嘗試在 vscode 中開發 C 代碼,但是編輯器一直試圖將*.h
文件視為C++
文件而不是C
文件,從根本上說,這是因為據我所知告訴 MS 討厭C
我遇到了同樣的問題,所以這是我最終使用的解決方案:
Ctrl
+ Shift
+ P
打開命令面板Preferences: Configure language specific settings
C
,這將打開Settings.json
"files.associations"
鍵"files.associations"
則必須定義它,並在其中添加"*.h": "c",
屬性。最后,文件應如下所示:
{
//...other settings
"files.associations": {
"*.h": "c",
},
//...other settings
}
每當您打開以.h
結尾的文件時,這會將編輯器模式設置為C
您可以為所有這些語言定義類似的設置。
“這會導致問題,因為我使用了 C99,而 Visual Studio 會認為頭文件是 C++,所以我不能在頭文件中使用 C 特性。”
不,問題是 Visual Studio 在任何地方都不支持 C99,無論是頭文件還是 .C 文件。 Visual Studio 遵循 ISO C90。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.