Come possiamo utilizzare qualsiasi libreria C all'interno del nostro codice C++? (Possiamo? Qualsiasi tuts su questo?) (Io uso VS10 e ora a parlare di librerie, come x264 e OpenCV)Come possiamo usare qualsiasi libreria C all'interno del nostro codice C++?
risposta
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
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++.
che va bene a patto che l'intestazione C non usa le parole chiave C++ (come 'new' o' private') come nomi. –
e su come chiamare le funzioni - se avessi "write_frame" in library.h in C++ potrei semplicemente chiamarlo come una funzione normale? – Rella
@Ole: sì, purché sia dichiarato "extern" C "' puoi chiamarlo come qualsiasi altra funzione. –
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.
È 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++. –
- 1. Come possiamo testare il nostro codice COM C++ senza registrare le DLL?
- 2. Possiamo usare "C" extern nel file C senza #ifdef __cplusplus?
- 3. Utilizzare una libreria C dal codice C#
- 4. Come usare una libreria C da D?
- 5. C codice sorgente libreria
- 6. Perché non possiamo usare le stringhe C come SEL?
- 7. come possiamo usare un file batch in C++?
- 8. Come usare il nostro carattere personalizzato sul nostro sito web
- 9. Strumentazione del codice C/C++ utilizzando LLVM
- 10. Posso usare in qualche modo il codice C# o la libreria C# nel progetto java android?
- 11. Come usare OpenSSL nella libreria POCO C++ correttamente
- 12. Come utilizzare il codice C in C++
- 13. c/C++ Libreria NLP
- 14. Come incorporare una libreria C++ in una libreria C?
- 15. Possiamo usare QT con C# per creare GUI?
- 16. C# Qualsiasi funzione come parametro
- 17. Come posso usare la libreria Boost :: regex.hpp in C++?
- 18. Come ottenere la selezione del formato di codice (auto) di qualsiasi codice html tramite jQuery/C#? (Qualsiasi soluzione)
- 19. Documentazione del codice di libreria C++/CLI per l'uso da C# - i migliori strumenti e pratiche?
- 20. Collegamento della libreria D al codice C++
- 21. come possiamo decomprimere un file nell'obiettivo c?
- 22. Come possiamo scrivere il nostro file modello di codice in IntelliJ IDEA
- 23. usare o non usare C++ 0x dispone
- 24. Come posso usare una libreria C++ da node.js?
- 25. Come usare la libreria C++ Boost con pkg-config?
- 26. Libreria di analisi del sentiment C++
- 27. Integrare c/C++ con codice nativo Java come libreria condivisa (compilato da gcj)
- 28. Come determinare quale compilatore C/C++ usare?
- 29. Qualsiasi buona libreria di ricerca foto per Objective C?
- 30. Qualsiasi libreria per tipi di dati generici in C?
Non è necessario '#ifdef __cplusplus' se sai che stai scrivendo C++. Questo è necessario solo in un'intestazione progettata per l'inclusione da entrambe le lingue. –
@Mike: certo che hai ragione. Probabilmente ho scritto troppi framework/librerie :) Scusate per le mie cattive abitudini;) – neuro