2010-07-13 80 views

回答

2

那么你可以使用C++代码中的任何C库。这是C++的一件很酷的事情:-) 您只需将库头文件包含在C++代码中,并链接到您使用的库。

任何好的库都会处理它从C++中包含的头文件。如果不是这样,你必须自己用的东西像做:

#ifdef __cplusplus 
extern "C" { 
#endif 

#include "c_header.h" 

#ifdef __cplusplus 
} 
#endif 

编辑:正如迈克说,在ifdef的部分,才需要,如果你不知道,如果你的文件将使用C或C使用++ 。例如,如果文件是API标头的头部,则可以保留它们。

顺便说一句,opencv处理由C或C++包含(因此你已经在opencv头文件中有#ifdef部分)。我不知道X264 ...

my2cents

+0

如果您知道自己在编写C++,则不需要'#ifdef __cplusplus'。这只需要在两种语言包含的头文件中。 – 2010-07-13 10:07:53

+0

@Mike:当然你是对的。我可能写了太多的框架/库:)对我的坏习惯抱歉;) – neuro 2010-07-13 14:59:05

10

是的,唯一需要做的就是将#include语句与extern "C"包装在一起告诉C++编译器使用C-语义函数名和这样的:

extern "C" { 
#include <library.h> 
} 

连接时,只需添加库就像任何普通的C++库。

+0

这很好,只要C头不使用任何C++的关键字(如'new'或'private')的名称。 – 2010-07-13 09:35:08

+0

以及如何调用函数 - 如果我在C++中的library.h中'write_frame'我可以把它叫做普通函数? – Rella 2010-07-13 09:36:39

+0

@Ole:是的,只要声明了“extern”C“',你就可以像调用其他函数一样调用它。 – 2010-07-13 09:38:42

0

据我所知,如果你有你要使用的库,你只需要在你的头文件中加入一个include,你就可以使用它。 从那里。

+0

您需要'extern“C”'告诉C++编译器库函数具有C风格的链接,并且某些C头可能包含在C++中无效的名称。 – 2010-07-13 10:14:30