Piuttosto una domanda da principianti così com'è.È vero che tutte le librerie c possono essere utilizzate in C++?
risposta
La risposta è sì. Date un'occhiata a questo:
Sì. Non c'è ragione per cui non puoi usare le librerie C in C++. Le cose cambiano se si desidera compilare C in un compilatore C++. La C ABI è completamente supportata da C++, tuttavia le cose non sono necessariamente così chiare da una prospettiva API. Alcune aggiunte di C come restrict
non sono nello standard C++ e devono essere gestite con attenzione.
Beat me di 30 secondi con la stessa risposta :) –
@Merlyn Morgan-Graham: le scale sono lunghe nella torre :) –
Un caso più estremo potrebbe essere una funzione che accetta un argomento di tipo vla, ad esempio 'int foo (int n, char x [] [n]); '- spero di aver capito bene. –
Se le intestazioni sono protette correttamente con extern "C" { ... }
, quindi si.
Se non lo sono, puoi creare le intestazioni personali o potresti essere in grado di avvolgere quelli esistenti. –
Non direi mettere 'extern "C"{...}' in un colpo di testa per il codice C-linguaggio "corretto", ma la risposta di Stephen potrebbe essere interpretato come mettere il 'extern "C"{...}' attorno alle righe '# include'. –
@R ..: Naturalmente, uno protegge il 'extern" C "' con '#if definito __cplusplus', o racchiude l'inclusione al posto dell'intestazione stessa. Il pensiero era un dato. –
Sì, e no.
I questionables sono ...
letterali Compund
numero complesso Native tipi di dati
"limitare" parola chiave
macro variadic
"long long int" tipo di dati
Alcune di queste caratteristiche di C sono incluse in C++ 0x e alcuni sono disponibili come estensioni di libreria in molti compilatori più recenti C "normale" ++.
Quindi dipende dal livello di C di cui si sta parlando, dal livello dello standard C++ e dalla piattaforma di quale compilatore, poiché le implementazioni del compilatore hanno sempre un supporto vario per gli standard e gli errori, naturalmente.
E poi ci sono le parole chiave utilizzate in C++ che non sono stati definiti in C, e sono quindi disponibili per essere utilizzati come nomi di variabili in C, ma fare un compilatore C++ vomitare. In C è perfettamente legale per utilizzare le seguenti parole come variabili o nomi di funzioni, ma saranno ovviamente rendere C++ gettare un attacco isterico ...
- modello
- nuovo
- classe
Oh e "goto" si comporta diversamente in C++ e C. In C++ "goto" non può essere usato per saltare l'inizializzazione di una variabile, ma va bene per C. Lo stesso vale per le istruzioni switch. In C puoi scrivere un'istruzione switch o una serie di goto che non verranno compilati in C++.
Cos'altro? "strchr" funziona in modo diverso in C vs C++. In C restituisce un puntatore char. In C++ restituisce un const puntatore char. Se si utilizza quell'output da strchr in un certo modo in C, si potrebbero soffiare blocchi in C++ a causa della correttezza const di C++.
Le funzioni inline vengono gestite in modo diverso.In C hanno un ambito per il file, ma in C++ hanno il collegamento esterno per impostazione predefinita.
Il codice C++ richiede i prototipi di funzione definiti con extern "C" per chiamare in una funzione C.
C++ maneggia i simboli dei nomi di funzione, ma C no.
"In teoria non v'è alcuna differenza tra la teoria e la pratica In pratica c'è.." - Yogi Berra
Perché alcuni downvoting? Ho fatto un errore? – Allbite
penso che il mio esempio inventato vi mostrerà il motivo per cui non è sempre possibile:
#ifndef HEADER_H
#define HEADER_H
int class(int a, int b);
int private(int a);
#endif
Perfettamente valido C ma non verrà compilato in C++, anche con un blocco "C" extern. Per quanto ne so l'unico modo per usare una libreria C del genere è creare un'altra libreria C che chiama quelle funzioni e quindi usare quella libreria wrapper nel codice C++.
Detto questo, penso che inciampare in qualcosa del genere nel "mondo reale" sia piuttosto raro.
Per essere onesti, nessuno in realtà dovrebbe nominare le loro funzioni come quella, ma questo vuol dimostrare che non tutte le librerie C sono compatibili. – dreamlax
Ma se è stato compilato in un lib con un compilatore C è possibile utilizzare la libreria in C++ - il nome storpiatura prende cura di esso –
@ Martin - come si dovrebbe fare su come utilizzare queste funzioni in C++? –
- 1. Quali librerie Java possono essere utilizzate per generare KML?
- 2. In C, le etichette non utilizzate possono sempre essere rimosse e mantenere attivo un programma?
- 3. Alternativa alle winforms che possono essere facilmente utilizzate con C# e .NET
- 4. Le trasformazioni Web.config possono essere utilizzate con i file App.config?
- 5. Le espressioni lambda/delegate in C# "puro" o possono essere?
- 6. Array che possono essere accesed utilizzando array [ 'name'] in C#
- 7. Librerie di compressione per C++
- 8. C: MSDN dice che "gli argomenti predefiniti possono essere forniti per i puntatori alle funzioni", ma è vero?
- 9. Come possono le nuove librerie Clojure essere caricata nel repl
- 10. espressione è sempre vero in C#
- 11. Come gestite le opzioni che non possono essere utilizzate insieme (usando OptionParser)?
- 12. possono essere utilizzate per inizializzare le variabili membro in un elenco di inizializzazione?
- 13. librerie quaternion in C/C++
- 14. I costruttori C++ possono essere template?
- 15. Sono disponibili tutte le librerie ccTalk?
- 16. Quali tipi di funzioni C++ possono essere posizionati in un puntatore a funzione C?
- 17. Le classi astratte possono implementare in C#?
- 18. Quali classi e funzioni C# possono essere utilizzati nel rasoio?
- 19. Perché sto ricevendo "'Le operazioni di aggregazione possono essere utilizzate solo su proprietà RLMArray'"?
- 20. I riferimenti matematici possono essere abbreviati in C#?
- 21. Due stringhe identiche possono essere due istanze separate in C#?
- 22. Le unità di rete mappate non possono essere elencate in C#
- 23. C# Uccidi tutte le discussioni
- 24. Le funzioni C++ possono essere contrassegnate come lancio "C" di Extern?
- 25. Esempi di quali macro di Lisp possono essere utilizzate per
- 26. Le istanze di classe C++ nello stack possono essere catturate dai blocchi Objective-C?
- 27. Incorpora librerie C++ in librerie .Net
- 28. C++ da C#: funzione C++ (in una DLL) che restituisce false, ma C# pensa che sia vero!
- 29. Librerie C++ simili a C#?
- 30. Conoscere le librerie C++ di grafica voxel?
Intendi le intestazioni di libreria C standard o qualsiasi libreria personalizzata scritta in C? E di quale revisione di C stiamo parlando? Hai in mente anche una piattaforma? – Allbite
@Allbite: tutto irrilevante alla domanda. –
Essendo che le implementazioni variano sul loro esatto supporto per lo standard C++, e ci sono diverse versioni di C e C++ (come in C99, ANSI, C++ 0x, ecc.), Alcuni chiarimenti sono in ordine. In particolare, però, stai chiedendo informazioni sulle funzioni standard della libreria C, ad es. "strcpy", o stai intendendo assolutamente qualsiasi C lib personalizzata scritta da chiunque? – Allbite