如何在C ++中使用C代码

时间:2013-07-03 12:29:51

标签: c++ c header-files

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

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

3 个答案:

答案 0 :(得分:37)

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

#ifdef __cplusplus
extern "C"
{
#endif

// C header here

#ifdef __cplusplus
}
#endif

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

答案 1 :(得分:13)

如果您正在使用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

答案 2 :(得分:8)

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

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

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