2010-07-13 8 views

risposta

2

Bene, è possibile utilizzare qualsiasi libreria C dal proprio codice C++. È una cosa interessante con C++ :-) Devi solo includere le intestazioni delle librerie nel tuo codice C++ e collegarti alle librerie che usi.

Qualsiasi buona libreria gestisce l'inclusione dell'intestazione da C++. Se non è il caso che dovete fare da soli con le cose come:

#ifdef __cplusplus 
extern "C" { 
#endif 

#include "c_header.h" 

#ifdef __cplusplus 
} 
#endif 

Edit: Come Mike ha detto, le ifdef parti sono necessari solo se non si sa se il file verrà utilizzato con C o C++ . Puoi tenerli se il file è un'intestazione di un'intestazione API, ad esempio.

A proposito, opencv gestisce l'inclusione da C o C++ (quindi hai già la parte #ifdef nelle intestazioni opencv). Non so per x264 ...

my2cents

+0

Non è necessario '#ifdef __cplusplus' se sai che stai scrivendo C++. Questo è necessario solo in un'intestazione progettata per l'inclusione da entrambe le lingue. –

+0

@Mike: certo che hai ragione. Probabilmente ho scritto troppi framework/librerie :) Scusate per le mie cattive abitudini;) – neuro

10

Sì, l'unica cosa che devi fare è quello di avvolgere la dichiarazione #include con extern "C" a dire il C++ compilatore di utilizzare il C-semantiche per i nomi delle funzioni e così via:

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

durante il collegamento, basta aggiungere la libreria come un qualsiasi normale lib C++.

+0

che va bene a patto che l'intestazione C non usa le parole chiave C++ (come 'new' o' private') come nomi. –

+0

e su come chiamare le funzioni - se avessi "write_frame" in library.h in C++ potrei semplicemente chiamarlo come una funzione normale? – Rella

+0

@Ole: sì, purché sia ​​dichiarato "extern" C "' puoi chiamarlo come qualsiasi altra funzione. –

0

Per quanto ne so, se si dispone della libreria che si desidera utilizzare, è sufficiente inserire un inclusione nel file di intestazione e utilizzarlo. da lì in poi.

+0

È necessario 'extern" C "' per dire al compilatore C++ che le funzioni della libreria hanno un collegamento in stile C, e alcune intestazioni C potrebbero contenere nomi che non sono validi in C++. –

Problemi correlati