我使用 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”
答案 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
。我遇到了同样的问题,所以这是我最终使用的解决方案:
C
+Ctrl
+Shift
以打开命令面板P
Preferences: Configure language specific settings
,这将打开C
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。