2011-01-16 15 views
6

questa è probabilmente una domanda stupida, ma non ho potuto trovare la risposta che stavo cercando. Inoltre, non ero sicuro che si trattasse di una domanda C++ o di una domanda VS2010, ma la risposta che sto cercando è quella di un POV tecnico, quindi sono finito qui.Perché il C++ usa ancora stdio.h?

Quando si avvia un nuovo progetto Applicazione console in VS2010, include automaticamente stdafx.h, che a sua volta include stdio.h. Le risposte che ho trovato per quanto riguarda stdio.h vs. iostream è stato più o meno:

stdio.h è stato utilizzato in C e iostream è utilizzato in C++

Non so se questo è giusto o sbagliato, ma ...

La mia domanda è: Perché lo stdio.h è ancora automaticamente incluso nei progetti C++? Non sarebbe sufficiente l'iostream?

risposta

3

I flussi IO in implementazioni C++ precedenti erano piuttosto lenti, portando i programmatori a continuare a utilizzare stdio.h. Apparentemente, è stato incluso in stdafx.h in passato e non può più essere rimosso da quell'intestazione poiché rimuovendolo si romperebbe il codice esistente.

+4

In che modo la rimozione di un valore predefinito per __new__ progetti interrompe il codice esistente? Alla maggior parte dei file che vengono rilasciati in progetti più recenti è necessario '#include stdio.h' – James

+0

Se questo è corretto, penso che risponda alla mia domanda abbastanza accuratamente. In altre parole si tratta di un residuo da quando stdio.h era (più frequentemente) utilizzato per operazioni io di iostream in C++ e oggi potrebbe essere considerato più o meno obsoleto per la programmazione in C++? Inoltre, come afferma Yippie-Kai-Yay, potrei stare meglio andando per un progetto vuoto con cui iniziare. Grazie! – Roger

+1

Non userei comunque un'intestazione come 'stdafx.h'. Il meccanismo di inclusione del C++ è abbastanza crudo, perché i produttori di compilatori non dovrebbero peggiorare le cose. –

3

Di solito i progetti vengono creati utilizzando Create Empty Project, in modo che sia possibile personalizzare le intestazioni di inclusione e precompilate manualmente.

Non ho idea del motivo per cui questo "predefinito" include, ma è una buona cosa impostare il progetto da zero come ho descritto in precedenza.

0

Anche se si utilizza l'output del flusso, è possibile eseguire alcune formattazioni. Quindi, se non altro, a volte verrà usato sprintf. sprintf vive in stdio.h

+1

Gli stream hanno una formattazione. E c'è Boost.Format. Non c'è bisogno di sprintf (e dovresti comunque usare snprintf). –

+1

Sì, aumenta ... Zillion di codice, errori di compilazione folle, e quello che ottieni è Boost.Format invece printf()! Non è un buon affare per ciao-mondo. – mbaitoff

-1

Forse perché lo studio visivo si rivolge ai programmatori di Mort, che non sarebbero in grado di ottenere il "mio primo programma C++" senza printf, e decidono che il prodotto non ha funzionato correttamente.

Prima del voto di voto google visual studio mort persona.