2010-07-13 7 views

Respuesta

2

Bueno, puede utilizar cualquier biblioteca C desde su código C++. Eso es algo genial con C++ :-) Solo tienes que incluir los encabezados de las bibliotecas en tu código C++ y vincularlas con las bibliotecas que usas.

Cualquier buena biblioteca maneja su inclusión de encabezado de C++. Si no es el caso de tener que hacerlo usted mismo con cosas como:

#ifdef __cplusplus 
extern "C" { 
#endif 

#include "c_header.h" 

#ifdef __cplusplus 
} 
#endif 

Edit: Como Mike dijo, los ifdef partes sólo son necesarios si usted no sabe si su archivo se utilizará con C o C++ . Puede mantenerlos si el archivo es un encabezado de un encabezado API, por ejemplo.

Por cierto, opencv maneja la inclusión por C o C++ (por lo que ya tiene la parte #ifdef en los encabezados de opencv). No sé para x264 ...

my2cents

+0

No necesita '#ifdef __cplusplus' si sabe que está escribiendo C++. Eso solo es necesario en un encabezado diseñado para ser incluido por ambos idiomas. –

+0

@Mike: por supuesto, tienes razón. Probablemente he escrito demasiados frameworks/libs :) Lo siento por mis malos hábitos;) – neuro

10

Sí, lo único que tiene que hacer es envolver la declaración #include con extern "C" para decirle al C++ compilador para utilizar los C-semántica de los nombres de función y tal:

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

durante la vinculación, sólo tiene que añadir la biblioteca como cualquier lib normal de C++.

+0

eso está bien, siempre y cuando la cabecera de C no utiliza ningún ++ palabras clave de C (como '' new' o private') como nombres. –

+0

y ¿qué tal si llamamos a funciones? Si tuviera 'write_frame' en library.h en C++, ¿podría simplemente llamarlo como una función normal? – Rella

+0

@Ole: sí, siempre que se declare 'extern' C "' puede llamarlo como cualquier otra función. –

0

Por lo que yo sé, si tiene la biblioteca que desea usar, simplemente inserte una inclusión en el archivo de encabezado y puede usarla. a partir de ahí.

+0

Necesita 'extern" C "' para decirle al compilador de C++ que las funciones de la biblioteca tienen una vinculación estilo C, y algunos encabezados C pueden contener nombres que no son válidos en C++. –

Cuestiones relacionadas