2011-01-16 8 views
6

esta es probablemente una pregunta tonta, pero no pude encontrar la respuesta que estaba buscando. Además, no estaba seguro si se trataba de una pregunta de C++ o una pregunta de VS2010, pero la respuesta que estoy buscando es la de un punto de vista técnico, así que terminé aquí.¿Por qué C++ sigue usando stdio.h?

Cuando inicia un nuevo proyecto de aplicación de consola en VS2010, automáticamente incluye stdafx.h, que a su vez incluye stdio.h. Las respuestas que encontré con respecto stdio.h vs iostream fue más o menos:

stdio.h se utilizó en C y iostream se utiliza en C++

No sé si esto es correcto o mal, pero ...

Mi pregunta es: ¿Por qué stdio.h aún se incluye automáticamente en los proyectos de C++? ¿No sería suficiente iostream?

Respuesta

3

Las secuencias de IO en las implementaciones anteriores de C++ eran bastante lentas, lo que llevó a los programadores a seguir usando stdio.h. Aparentemente, eso se incluyó en stdafx.h en el pasado y ya no se puede eliminar de ese encabezado, ya que su eliminación rompería el código existente.

+4

¿De qué manera la eliminación de un valor predeterminado para los proyectos __new__ rompe el código existente? En la mayoría de los archivos que se incluyeron en proyectos más nuevos, necesitaría '#include stdio.h' – James

+0

. Si esto es correcto, creo que responde a mi pregunta con bastante precisión. En otras palabras, es un remanente de cuando stdio.h fue (más frecuentemente) utilizado para operaciones io que iostream en C++, y hoy en día podría considerarse más o menos obsoleto para la programación en C++. Además, como afirma Yippie-Kai-Yay, es mejor que empiece con un proyecto vacío. ¡Gracias! – Roger

+1

No usaría un encabezado como 'stdafx.h' de todos modos. El mecanismo de inclusión de C++ ya es lo suficientemente crudo, los proveedores de compiladores no deberían empeorar las cosas. –

3

Normalmente los proyectos se crean usando Create Empty Project, de modo que usted puede personalizar sus encabezados incluidos y precompilados usted mismo.

No tengo idea de por qué ocurre esto "predeterminado", pero es una buena idea configurar su proyecto desde cero como he descrito anteriormente.

0

Incluso si está utilizando la salida de flujo, es bueno poder hacer algunos formateos. Entonces, si nada más, sprintf algunas veces será usado. sprintf vive en stdio.h

+1

Las secuencias tienen formato. Y está Boost.Format. No es necesario sprintf (y debes usar snprintf de todos modos). –

+1

Sí, Boost ... Un millón de código, errores de compilación insanos, y lo que obtienes es Boost.Format en lugar de printf()! No es un trato justo para hello-world. – mbaitoff

-1

Posiblemente porque el estudio visual se dirige a los programadores de Mort, que no podrían obtener el programa "mi primer C++" sin printf, y decidirían que el producto no funcionó correctamente.

Antes de votar vota google visual studio mort persona.

Cuestiones relacionadas