Me pregunto qué significa "mejor"?
Si "mejor" significa que puedes usarlo tanto en C como en C++, entonces gana fácilmente, ya que no puedes usar en C. Esta sería una respuesta corta y aburrida, y el Bot de Quora se la comería, así que vamos a asumir que estás usando C++.
Si "mejor" significa más seguro, entonces gana. The following code will crash (or at least, it’ll perform undefined behaviour):
- short x;
- scanf("%d", &x);
Many modern compilers will warn you about this, but it’s not actually part of the standard to do so. Estaría pasando un puntero a un número de 16 bits, y scanf() lo trataría como un número de 32 bits (bueno, en la mayoría del hardware, etc, etc, etc).
Hay un montón de problemas similares con stdio - es lo suficientemente seguro si realmente sabes lo que estás haciendo, pero sorprendentemente pocos programas grandes de C realmente lo utilizan.
Si "mejor" significa más clásicamente orientado a objetos, entonces stdio podría ganar. Everything is encapsulated as a FILE pointer, and one can, sort of, argue that the functions taking FILE* as the first argument are examples of message passing.
- fprintf(f, “This might be a file, or a console!n”);
But equally, iostream has a rich inheritance tree, and allows custom iostream transports to be built by simple inheritance of streambuf, for example. Además, maneja mejor los nuevos tipos. En general, entonces, diría que iostream tiene la ventaja aquí, incluso si la sintaxis del insertador no es muy clásica.
- out << "Pero entonces, también puede ser eso." << std::endl;
If “better” means quicker to build, it’s stdio for sure. Iostream es una vasta franja de plantillas, y esas sí que tardan bastante más en compilar que las simples llamadas a funciones.
Si "mejor" significa más rápido... Bueno, entonces se te perdonaría pensar que está destinado a ser el semánticamente simple stdio. Y estarías equivocado, porque vastas extensiones de iostream son una biblioteca de plantillas, y por lo tanto en su mayoría ordenadas en tiempo de construcción. Para cualquier cosa remotamente compleja - y ciertamente cualquier cosa que involucre tipos personalizados - iostream es más rápido, ya que elimina docenas de llamadas a funciones y puede especializar la inserción llamada para el tipo durante la construcción, dejando un tiempo de ejecución sorprendentemente ajustado. Una vez escuché a Bjarne Stroustrup explicar esto, y dijo que estaba tan sorprendido como usted probablemente ahora.
Si "mejor" significa más fácil de manejar el formato de salida compleja, stdio gana - tanto, de hecho, que hay implementaciones de formato de cadena golpeando alrededor que se integrará muy bien con iostream (por ejemplo, boost::format).
En general, iostream es un ganador - aunque es posible que desee añadir en boost::format u otras bibliotecas como sea necesario.