Quando usare printf / scanf vs cout / cin?

Sto testando alcuni frammenti che ho trovato sul Web usando g ++ da MinGW. Questo è il compilatore C ++ … perché poi compila correttamente C …. perché le persone intrecciano C e C ++.

La domanda concreta è: è corretto usare sia C che C ++ e compilare sotto g ++. Se la risposta è sì, questo rende la mia vita facile in quanto non devo modificare il codice.

Stranamente … per far funzionare un C ++, in particolare quando si passa una stringa a un costruttore ifstream richiede una stringa di tipo C …

La mia ipotesi sarebbe che, dato che C ++ dipende da costrutti C a volte, è OK scrivere insieme le due lingue.

Comunque, per questioni di stile, dovresti accontentarti di cout / cin o printf / scanf .

Ci sono alcune stranezze in cui è necessario char* . Puoi colmare il divario usando il metodo .c_str() di uno std::string per ottenerne uno.

Per la maggior parte, il sottoinsieme C di C ++ è compatibile. Esattamente come non è compatibile per la maggior parte:

http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

Se stai compilando snippet di codice C sotto un compilatore C ++, assicurati di cambiarlo per usare il formato “c” lib nei tuoi include … per esempio #include invece di #include

È una ctriggers pratica usare un header C invece del suo equivalente in C ++ in C ++ (ad esempio stdio.h invece di cstdio)?

Per un argomento abbastanza ragionato da parte di Bjarne stesso sul perché evitare scanf, date un’occhiata all’inizio di questo articolo:

http://www2.research.att.com/~bs/new_learning.pdf

Ci sono molti vantaggi nell’usare iostreams invece di printf:

‘printf’ vs. ‘cout’ in C ++

Il linguaggio C ++ eredita gran parte delle sue funzionalità principali da C. Questo perché il C ++ è stato derivato da C. Lo standard C ++ include, per riferimento, gran parte dello standard C. Quindi puoi usare il compilatore C ++ per scrivere codice usando costrutti, idiomi e paradigmi di C. Farlo viene spesso definito come l’uso di C ++ “come un C. migliore”.

Il lungo e il breve di quanto sopra è sì, è ansible utilizzare printf in codice C ++. Ciò è esplicitamente consentito dallo Standard.

In questo modo tuttavia trascurerai molte delle funzionalità che definiscono C ++. Lascerò questa conversazione per un’altra domanda, ma basti dire che molte persone ti diranno semplicemente “non farlo” o “non è C ++”. Questo mette da parte i motivi per cui potresti non voler usare printf in un programma C ++ o perché lo vorrai. Ma state certi che è tecnicamente permesso.

Va bene usare sia C che C ++ e compilare sotto g ++.

Sì, va bene mescolare le due lingue. Questo è comune con il codice che è iniziato come C, ma poi ha aggiunto sempre più funzionalità di C ++ (ovviamente qualcuno ha cambiato il compilatore lungo la strada).

Generalmente, il codice C verrà compilato ed eseguito con un compilatore C ++. Ci sono molte possibili eccezioni, come l’uso di parole chiave come la class e virtual per i nomi di cose nel codice C o le regole rilassanti di casting di C.

Sentirai spesso dire “sono lingue molto diverse”. Questo perché qualsiasi domanda di programmazione che tu chiedi probabilmente ha una risposta diversa a seconda della lingua che stai cercando di usare. Tuttavia, ci sono molte somiglianze e aspetti di compatibilità con le versioni precedenti.

Se usi C ++, usa C ++. ( cin , cout )
Perché fstream prende anche me i c string puzzle.