|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2010
Messaggi: 67
|
[c++] perchè usare cstdio?
Ciao a tutti. Nel mio sperimentare quotidiano in C/C++ sono arrivato a pormi la domanda che fa da titolo al post.
In C++ ho la comoda libreria iostream per tutto ciò che è input e output, eppure rimane la possibilità di usare la versione C con il classico puntatore a FILE, eccetera. Ma perchè usarla? Leggevo qui sul forum che la versione a oggetti di C++ comporta un decremento (ovviamente leggerissimo, sui computer di oggi) delle performance, ma in generale secondo voi quali sono i punti positivi e negativi di entrambe le librerie? Se devo "semplicemente" aprire un file di testo, mi conviene non tirare in ballo tutta la iostream? Vi ringrazio in anticipo per qualsiasi delucidazione |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
la libreria di I/O del C++ non decrementa un bel niente perché il C++ di per se' é solo una specifica, non é intrinsecamente caratterizzato da alcuna performance. semmai si puó fare il confronto tra una particolare implementazione della libreria di I/O del C++ e una particolare implementazione di quella del C, ma anche cosi non dovrebbe influire piu di tanto sulla tua scelta perché non vedo cosa possa importarti se a fare una stampa ci metti anche (per esagerare) un decimo di secondo in piu.
il motivo per cui in C++ esiste cstdio é semplicemente la retrocompatibilitá: hai del codice in C che usa stdio.h e che non vuoi o non puoi cambiare, devi riusare quel codice e devi ad esempio fornirgli dei file pointers. oppure quel codice fa delle stampe su stdout anziché su cout, e utilizzare entrambi i meccanismi nello stesso programma porta a comportamenti non definiti, quindi sei costretto a usare stdout. |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Apr 2010
Messaggi: 67
|
Quote:
Quindi tu dici che è solo per una questione di retrocompatibilità. Leggendo tra le righe, chi programma da zero in C++ dovrebbe dimenticarsi di quella libreria. Ho afferrato?
|
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: May 2003
Città: Monza
Messaggi: 175
|
In linea di principio gli stream sono l'orientamento che il C++ ti propone per la gestione dell'I/O.
Non so a che livello di conoscenza tu sia del C/C++, tuttavia, se sei ad un livello di primo approccio ti consiglio vivamente di imparare il C standard ANSI e poi di integrare le tue conoscenze con il C++.. ergo.. ti consiglio di provare ad utilizzare cstdio almeno una volta se non la hai mai usata per poi passare agli stream..
__________________
Ciao! |
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Apr 2010
Messaggi: 67
|
Quote:
Ho iniziato con php e la gestione dei file, molto simile a stdio, l'ho sempre trovata pulita e comprensibile. Ecco il perchè della mia ultima domanda iniziale: se devo "semplicemente" aprire un file di testo, mi conviene non tirare in ballo tutta la iostream? Come ho intuito da quanto ha detto fero86, non dovrei pormi nemmeno la questione; per chi crea un programma ex novo in c++ la stdio non esiste |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
E' molto più comoda e flessibile della gestione dell'I/O del C, e se cominci a spulciarti i template sotto <iterator> (che fanno da adapter tra iostream e iterator, tra le altre cose) hai la possibilità di scrivere codice molto compatto.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
In generale non ci sono particolari differenze di performance tra l'IO del C e quello del C++, a parte alcuni casi particolari (ad esempio una snprintf è decisamente più performante di una ostringstream, e pure meno macchinosa), per cui se puoi fare la scelta resta sulla libreria del C++, che type-safe e ti permette di usare le eccezione se ti va.
Detto questo, un programmatore C++ deve spesso interfacciarsi con librerie C (tutte le api POSIX ad esempio), per cui è importante conoscere entrambe, anche se per questo ci puoi pensare più avanti quando avrai più dimestichezza con quelle del C++.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
#9 | ||
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
Quote:
|
||
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
direi proprio di si, la libreria di I/O del C é scomoda, ti fa solo scrivere piu codice a paritá di risultati. per fare un esempio, i file pointers non sono "automatici", nel senso che li devi chiudere manualmente con fclose laddove invece gli fstream si chiudono da soli all'uscita dallo scope (anche se esci con un'eccezione).
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Devi chiederlo a chi le implementa, non a me
http://www.fastformat.org/performance.html Quote:
Codice:
char filename[256]; snprintf(filename, 256, "filename-%d.txt", id ); ofstream f(filename); Codice:
ostringstream filename; filename << "filename-" << id << ".txt"; ofstream f( filename.str().c_str() );
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sinceramente il problema non credo sia tanto la quantità di righe di codice, ma quanto la libreria C sia molto più error prone di quella C++.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:03.



















