c++ - Visual Studio 不区分 C header 和 C++ header

标签 c++ c visual-studio header

我正在使用 Visual Studio 2017-enterprise 使用 C 语言,但 C 头文件存在一个复杂的问题,因为 Visual Studio 会考虑每个头文件 是一个 C++ 头文件。因此,无论扩展名是 .hpp 还是 .h,它都会将其视为 C++ header , 这会导致问题,因为我使用 C99 并且 Visual Studio 会认为 header 是 C++,因此我无法在 header 文件中使用 C 功能。

注意:当我将源文件命名为 .c 时,Visual Studio 会将其视为 C 文件,而不是 C++,并且它是好的。所以我需要对标题做同样的事情。 我需要为 c 制作 .h,为 c++ 制作 .hpp 如何?

VS 2010、2013、2015 也存在此问题。

编辑::

the problem with highlighting for example if i create class in .c file visula studio will say there is error but this will not show any error if i create class in .h file even if i use extern"C"

看看这张图片: source.h 现在看看这个 source.c

最佳答案

如果您从 .c 文件中#include .h 文件,则 Visual Studio 会将其编译为 C。如果您 #include 来自 .cpp 文件的 .h 文件,然后 Visual Studio 会将其编译为 C++。

在特定于 C 的 header 中执行此操作很常见:

#ifdef __cplusplus 
extern "C" {
#endif

void MyCFunction();
void MyCFunction2();

#ifdef __cplusplus 
}
#endif

这允许您声明用 C 实现的函数。其他 C 源代码可以使用这些函数,C++ 源代码也可以使用这些函数。

您实际上不需要担心特定于 C++ 的 header ,因为如果您在 C 源代码中#include 它们,您只会收到编译错误。

关于c++ - Visual Studio 不区分 C header 和 C++ header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45942189/

相关文章:

c++ - 如何获取包罗万象的异常消息

c++ - 默认智能设备项目找不到依赖项

c++ - 在 Visual Studio 2010 和 11 之间共享 C++ 解决方案

c++ - 使用 CreateRemoteThread 注入(inject) DLL

c++ - 读取可能不完整的文件 C++

c++ - 文件流打不开

c++ - 为什么有人会更喜欢静态策略而不是动态策略?

c - 访问传递给函数的链表数组的成员

从 char 数组构造一个唯一字符数组

C语言编程(结构体)