Quando si usa stdio preferibile a fstream?

4

Lavoro su una base di codice C ++ ben consolidata e incorporata. Abbiamo utilizzato un'API proprietaria per il nostro file system. Per una migliore integrazione con le librerie C di terze parti, stiamo attualmente implementando la maggior parte di stdio.h e fcntl.h . Ho fatto quello che pensavo fosse una proposta non controversa che dovremmo anche implementare la classe fstream e incoraggiare il nuovo C ++ codice per usarlo al posto della nuova API di tipo C (alla nostra base di codice). Disponiamo già delle stdout parti di iostream disponibili, sebbene non sia ampiamente utilizzato.

Data una scelta tra l'utilizzo di stdio e fstream , quali sono i buoni motivi per scegliere stdio per lo sviluppo di software embedded in C ++?

    
posta Karl Bielefeldt 19.09.2012 - 18:21
fonte

3 risposte

4

La mia ragione principale sarebbe la familiarità con la biblioteca. Tornando ai miei giorni incorporati (poco più di un decennio fa), la maggior parte degli sviluppatori di C ++ in diverse aziende in cui lavoravo proveniva da un strong background in C. L'input e l'output in stile C non richiedevano alcun apprendimento, mentre i concetti avanzati di manipolazione dei flussi spesso richiedevano il controllo di un libro.

Per ragioni puramente tecniche, non credo che ce ne siano: l'I / O del flusso correttamente implementato dovrebbe essere veloce quanto l'I / O in stile C e utilizzare approssimativamente la stessa quantità di memoria.

    
risposta data 19.09.2012 - 19:43
fonte
1

Poiché stai chiedendo informazioni sull'API, non c'è molto altro da dire oltre al classico argomento <iostream> rispetto a <stdio.h> . Mentre molti di questi argomenti sono solo argomenti soggettivi del gusto, mi sembra chiaro che ci sono molte ragioni oggettive che rendono il iostream ampiamente preferibile. IOstream ti offre sicurezza ed estensibilità del tipo ed evita la possibilità di lasciarti aperto a un exploit di sicurezza delle stringhe di formato .

Non vedo alcun motivo particolare per cui questo dovrebbe essere molto diverso in un ambiente embedded. Vorrei andare con <iostream> .

L'unica ragione (un po 'forzata) che posso vedere per favorire stdio.h in un progetto C ++ è se stai lavorando con un'API C che spesso usa vararg, costringendoti a utilizzare frequentemente le funzioni v * printf. In tal caso, potresti sostenere che potrebbe essere meglio attenersi a stdio.h solo per motivi di coerenza in tutto il codice.

    
risposta data 19.09.2012 - 19:37
fonte
0

SE le classi sono già state implementate per fstream (incluso l'overloading dell'operatore e simili), quindi userò sicuramente fstream (sembra che ci siano più programmatori C ++ nel team). MA Se dovessi implementare le librerie da solo (che di solito è il caso con i programmatori di sistemi MOST più grandi) sceglierei una libreria più veloce ed efficiente come stdio. stdio è meno dipendente dallo 'std-runtime-of-c' e più dipendente dai buffer e dai puntatori alle strutture, che è ovviamente più veloce (da usare e codificare)!

stdio occupa meno spazio (quindi esegue più velocemente) rispetto a fstream (che si basa su concetti oo e si ramifica in ifstream e ofstream, sopra fstream c'è una classe stream).

    
risposta data 19.09.2012 - 18:27
fonte

Leggi altre domande sui tag