簡體   English   中英

Visual Studio 不區分 C 頭文件和 C++ 頭文件

[英]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" 也不會顯示任何錯誤

看看這個圖像: source.h現在看看這個source.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 我遇到了同樣的問題,所以這是我最終使用的解決方案:

  1. Ctrl + Shift + P打開命令面板
  2. 開始輸入Preferences: Configure language specific settings
  3. 選擇C ,這將打開Settings.json
  4. 如果"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.

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