2017-08-29 90 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