2017-08-29 87 views
-2

我使用C語言進行工作,Visual Studio 2017-企業版但C頭文件存在複雜問題,因爲Visual Studio認爲每個頭文件 都是C++頭文件。因此,無論擴展名是.hpp還是.h,它都會將其視爲C++頭文件, ,這會導致問題,因爲我使用C99,因此Visual Studio會考慮頭文件爲C++,因此我無法在頭文件中使用C功能。Visual Studio沒有區分C頭文件和C++頭文件

:當我命名一個源文件.c時,Visual Studio將其視爲一個C文件,而不是C++,這是很好的。所以我需要對標題做同樣的事情。 我需要爲.c和.hpp for C++做.hh如何?

這個問題也與VS 2010,2013,2015年

編輯::

與突出例如,如果我創建的.c文件 工作室visula類會說的問題有錯誤,但這將不會顯示任何 錯誤,如果我在.h文件中創建類即使我使用extern「C」

看看這個圖片: source.h 現在就來看看這 source.c

+0

一切都取決於您調用頭文件的位置。考慮使用'extern「C」'作爲C代碼。這在你提到的任何版本中都不是問題。它按預期爲C和C++單獨運行。如果你從.cpp包含.h文件,那麼你就錯過了對待。 – tilz0R

+3

頭文件不是編譯單元。 –

+4

標題未編譯爲C或C++。源文件被編譯。如果某些頭文件必須包含在c和C++源代碼文件中 - 請使用#ifdef __cplusplus –

回答

1

如果#include.c文件.h文件,然後Visual Studio將其編譯爲C.如果你#include.cpp文件.h文件,然後視覺Studio將其編譯爲C++。

是很普遍做到這在C特定頭:

#ifdef __cplusplus 
extern "C" { 
#endif 

void MyCFunction(); 
void MyCFunction2(); 

#ifdef __cplusplus 
} 
#endif 

這使您可以聲明其在C.其他C-源實現的可使用這些函數的函數,和C++源代碼可以使用這些功能。

你並不需要擔心C++特定的頭文件,因爲如果你在C源文件中使用了#include,你就會得到編譯錯誤。

+0

問題突出顯示 – Rihcodo

0

「這會導致問題,因爲我使用C99,而Visual Studio會考慮頭是C++,因此我無法在頭文件中使用C功能。」

不,問題是Visual Studio不支持C99任何地方,既不在頭文件也不在.C文件。 Visual Studio遵循ISO C90。

+0

好吧,但我仍然需要視覺工作室作爲語法高亮只:所以我需要它考慮.h是交流文件和.hpp作爲cpp文件是任何解決方案或者我將需要創建VS插件來做到這一點? – Rihcodo

+0

@Rihcodo:VS熒光筆使用C++規則,不管源碼如何。嘗試'int class',在C89中完全有效。 – MSalters