¿Cómo podemos usar cualquier biblioteca C dentro de nuestro código C++? (¿Se puede? Cualquier tuts sobre eso?) (I utilizar VS10 y ahora hablando de bibliotecas como x264 y OpenCV)¿Cómo podemos utilizar cualquier biblioteca C dentro de nuestro código C++?
Respuesta
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
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++.
eso está bien, siempre y cuando la cabecera de C no utiliza ningún ++ palabras clave de C (como '' new' o private') como nombres. –
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
@Ole: sí, siempre que se declare 'extern' C "' puede llamarlo como cualquier otra función. –
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í.
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++. –
- 1. ¿Podemos utilizar este puntero dentro del constructor
- 2. Cualquier desventaja de utilizar ExecuteReaderAsync de C# AsyncCTP
- 3. Cómo utilizar OpenSSL en la biblioteca POCO C++ correctamente
- 4. ¿Cómo podemos proteger nuestra imagen copiada de nuestro sitio web
- 5. Uso de la biblioteca C++ en el código C
- 6. C++ 11 std :: condition_variable: ¿podemos pasar nuestro bloqueo directamente al hilo notificado?
- 7. Obtener pila de llamadas desde cualquier subproceso dentro de C
- 8. Usar una biblioteca de C del código de C#
- 9. ¿Conoce cualquier biblioteca de vóxeles de gráficos C++?
- 10. Código fuente de la biblioteca C
- 11. ¿Cualquier biblioteca C/C++ de tipo OpenCV para procesamiento de audio?
- 12. Pequeña biblioteca Unicode de código abierto para C/C++
- 13. Cualquier biblioteca para tipos de datos genéricos en C?
- 14. ¿Cómo compilo el código Perl dentro de un programa C?
- 15. biblioteca c/C++ NLP
- 16. ¿Cómo puedo indexar nuestro código fuente interno?
- 17. ¿Cómo optimizan los compiladores nuestro código?
- 18. C# Regex coincide con cualquier cosa dentro de paréntesis
- 19. por qué no podemos crear nuestro propio objeto ostream
- 20. Cualquier biblioteca como STL (vector, mapa ...) en C?
- 21. Cómo paso en no administrado biblioteca de C++ de mi C++/CLI código
- 22. C++ Compatibilidad de biblioteca
- 23. Cómo utilizar foreach en C++ cli en el código administrado
- 24. Preprocesador C: usando #if dentro #define?
- 25. ¿Por qué no podemos usar el direccionamiento directo en el código c o C++?
- 26. C++ biblioteca de punto fijo?
- 27. C Biblioteca de imágenes
- 28. Cualquier recomendación para Sqlite C# generación de código ORM
- 29. biblioteca temporizador en C
- 30. Cómo utilizar la localización en C#
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. –
@Mike: por supuesto, tienes razón. Probablemente he escrito demasiados frameworks/libs :) Lo siento por mis malos hábitos;) – neuro