一个小问题: C ++可以在程序中使用C头文件吗?
这可能是一个奇怪的问题,基本上我需要在C ++中使用来自其他程序(用C语言编写)的源代码。两个头文件一般有什么区别吗?也许如果我改变一些图书馆...... 我希望你能帮助我。
答案 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 ++语法),但它通常是为了方便起见。