Visual Studio不区分C头和C ++头

时间:2017-08-29 14:49:11

标签: c++ c visual-studio header

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

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

此问题也适用于VS 2010,2013,2015。

修改::

  

突出显示的问题,例如,如果我在.c中创建类   文件visula工作室会说有错误,但这不会显示任何   错误,如果我在.h文件中创建类,即使我使用extern“C”

看这个图像: source.h 现在看看这个 source.c

3 个答案:

答案 0 :(得分:1)

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

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

#ifdef __cplusplus 
extern "C" {
#endif

void MyCFunction();
void MyCFunction2();

#ifdef __cplusplus 
}
#endif

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

您并不需要担心特定于C ++的标头,因为如果您在C源中#include它们,您将只会遇到编译错误。

答案 1 :(得分:1)

据我所知,您遇到的问题是您正在尝试在 vscode 中开发 C 代码,但是编辑器一直试图将 *.h 文件视为 C++ 文件而不是 {{1 }} 文件,基本上这是因为据我所知 MS 讨厌 C。我遇到了同样的问题,所以这是我最终使用的解决方案:

  1. C+Ctrl+Shift 以打开命令面板
  2. 开始输入P
  3. 选择Preferences: Configure language specific settings,这将打开C
  4. 如果键 Settings.json 未定义,您必须定义它,并在其中添加 "files.associations" 属性。

最后文件应该是这样的:

"*.h": "c",

每当您打开以 { //...other settings "files.associations": { "*.h": "c", }, //...other settings } 结尾的文件时,这会将编辑器模式设置为 C。您可以为 all these languages 定义类似的设置。

答案 2 :(得分:0)

“这会导致问题,因为我使用C99而Visual Studio会认为标头是C ++,所以我不能在头文件中使用C功能。”

不,问题是Visual Studio在头文件和.C文件中都不支持C99。 Visual Studio遵循ISO C90。