36

只是一个小问题:C++ 可以在程序中使用 C 头文件吗?

这可能是一个奇怪的问题,基本上我需要在 C++ 中使用来自其他程序(用 C 语言制作)的源代码。一般来说,这两个头文件有什么区别吗?也许如果我改变一些图书馆......我希望你能帮助我。

4

3 回答 3

54

是的,您可以在 C++ 代码中包含 C 标头。添加这个是正常的:

#ifdef __cplusplus
extern "C"
{
#endif

// C header here

#ifdef __cplusplus
}
#endif

以便 C++ 编译器知道函数声明等应该被视为 C 而不是 C++。

于 2013-07-03T12:32:03.163 回答
19

如果您将 C 代码作为项目的一部分与 C++ 代码一起编译,您应该只需要像往常一样包含头文件,并使用 C++ 编译器模式来编译代码 - 但是,一些 C 代码胜出'不要用 C++ 编译器“干净地”编译(例如,使用malloc将需要强制转换)。

另一方面,如果打开,您有一个库或一些其他代码不属于您的项目,那么您确实需要确保标头标记为extern "C",否则将适用已编译函数名称的 C++ 命名约定,这与 C 编译器使用的命名约定不匹配。

这里有两个选项,要么你编辑头文件本身,添加

#ifdef __cplusplus 
extern "C" {
#endif

... original content of headerfile goes here. 

#ifdef __cplusplus 
}
#endif

或者,如果您无法编辑这些标题,您可以使用此表单:

#ifdef __cplusplus 
extern "C" {
#endif
#include <c_header.h>
#ifdef __cplusplus 
}
#endif
于 2013-07-03T12:37:23.263 回答
15

是的,但是您需要告诉 C++ 编译器,来自标头的声明是 C:

extern "C" {
#include "c-header.h"
}

许多 C 头文件已经包含了这些,并包含在#if defined __cplusplus. 可以说这有点奇怪(C 标头中的 C++ 语法),但通常是为了方便起见。

于 2013-07-03T12:32:12.180 回答