Tengo una biblioteca C ++ que proporciona varias clases para administrar datos. Tengo el código fuente de la biblioteca.
Quiero extender la API de C ++ para admitir llamadas a funciones de C para que la biblioteca se pueda usar con código C y código C ++ al mismo tiempo.
Estoy usando la cadena de herramientas GNU (gcc, glibc, etc.), por lo que el soporte de lenguaje y arquitectura no es un problema.
¿Hay alguna razón por la que esto no sea técnicamente posible?
¿Hay alguna trampa de la que deba tener cuidado?
¿Hay recursos, código de ejemplo y / o documentación disponible al respecto?
Algunas otras cosas que he descubierto:
- Utilice lo siguiente para ajustar los encabezados de C ++ que deben utilizar el código C.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- Mantenga las interfaces C ++ "reales" en archivos de encabezado separados que no estén incluidos en el principio C. Piense en PIMPL aquí. Usar
#ifndef __cplusplus #error
cosas ayuda aquí a detectar cualquier locura. - Cuidado con los identificadores de C ++ como nombres en código C
- Enumeraciones que varían en tamaño entre los compiladores de C y C ++. Probablemente no sea un problema si está utilizando la cadena de herramientas GNU, pero aún así, tenga cuidado.
Para estructuras, siga el siguiente formulario para que C no se confunda.
typedef struct X { ... } X
Luego use punteros para pasar objetos de C ++, solo deben declararse en C como estructura X donde X es el objeto de C ++.
Todo esto es cortesía de un amigo que es un mago en C ++.