¿Por qué no se compila un programa simple al estilo "Hola mundo" con Turbo C ++?

101

Empecé a aprender C ++ para mi clase de programación. He descargado este programa "Hello World":

#include <iostream>
using namespace std;

int main() 
{
    cout << "Hello, World!";
    return 0;
}

pero Turbo C ++ se queja:

Error D:\HELLO.CPP 1: Unable to open include file 'IOSTREAM'
Error D:\HELLO.CPP 2: Declaration syntax error
Error D:\HELLO.CPP 6: Undefined symbol 'cout'

¿Qué pasa con este programa tan simple? ¿Cómo puedo corregir estos errores?

norte. 'pronombres' m.
fuente
39
Esto está destinado a ser una redirección estándar de dupe para preguntas sobre problemas de Turbo C ++. Muchas de estas preguntas tienden a ser rechazadas rápidamente con solo una breve explicación en los comentarios, mientras que realmente pueden usar una respuesta adecuada. Bienvenidos mejoras.
n. 'pronombres' m.
6
sugiera mencionar qué versión de Turbo C ++ está utilizando. La versión de 2006 hizo frente a este programa.
MM
5
"Empecé a aprender C ++ para mi clase de programación". Esto es una mentira. Período.
bugwheels94
5
@ bugwheels94 Mira esto .
n. 'pronombres' m.
5
@nm No sé si bugwheells significaba esto, pero entendí que si a uno se le enseña TurboC ++ (en particular, el antiguo TurboC ++ que no puede compilar esto), entonces no están aprendiendo C ++ (que muchas personas, incluido yo , se supone implícitamente que significa C ++ estándar ).
eerorika

Respuestas:

158

No hay problema con este programa. (Excepto probablemente algunos problemas de estilo, using namespace stdno se recomienda). El problema está en Turbo C ++. Es un software muy antiguo. Implementa un dialecto de C ++, el llamado pre-ANSI C ++ , que ha caído completamente en desuso a principios de este milenio. El primer estándar ANSI para C ++ se publicó en 1998, luego estuvo la versión 2003, la versión 2011, la versión 2014, la versión 2017, y ahora esperamos que la versión 2020 se publique oficialmente. Cada una de estas revisiones estándar trajo cambios más o menos significativos al lenguaje.

Para Turbo C ++ tienes que modificar el programa así:

#include <iostream.h>      // note the .h suffix
// using namespace std;    // Turbo C++ doesn't implement namespaces

int main() 
{
    cout << "Hello, World!";
    return 0;
}

Si observa este programa, la diferencia entre el dialecto C ++ moderno y el aceptado por Turbo C ++ puede parecer pequeña. Sin embargo, crecerá mucho más a medida que sus programas se vuelvan más complejos.

Si bien puede aprender a programar usando Turbo C ++, le recomiendo encarecidamente que lo evite si es humanamente posible debido a los siguientes problemas:

  1. Aprenderá un idioma que es algo similar a un idioma popular utilizado en la industria, pero que es muy diferente sin embargo, sin una buena razón. Si planea escribir C ++ para el desarrollo de software real, tendrá que volver a aprender mucho. Es mucho más fácil aprender C ++ moderno de inmediato.
  2. No hay literatura existente sobre Turbo C ++. Casi el 100% del material de C ++ que encontrará en Internet o en los libros no se aplica directamente a Turbo C ++ listo para usar. Algunos solo necesitarán una adaptación menor, mientras que otros materiales son completamente inutilizables. Prácticamente, la única fuente de ayuda disponible de inmediato es la ayuda integrada de Turbo C ++.
  3. Pocas personas recuerdan Turbo C ++. Al hacer preguntas en los foros, siempre especifique que está utilizando un dialecto anterior a ANSI para filtrar las respuestas orientadas a la versión moderna del idioma. Probablemente recibirá un montón de comentarios que le sugieren que se detenga inmediatamente y cambie a un compilador moderno con cada pregunta que haga.

Hay muchos compiladores e IDE modernos y gratuitos (como en cerveza , así como en voz ) que puede usar en lugar de Turbo C ++. Algunos de estos incluyen:

  1. Visual C ++ Community Edition es un IDE y un compilador de Microsoft
  2. Code :: Blocks es un IDE ligero. En Windows, viene con un compilador algo desactualizado, pero puede instalar un compilador más moderno usted mismo.
  3. Eclipse CDT es un potente IDE multiplataforma. No se envía con su propio compilador, por lo que debe instalar un compilador separado. En Windows, utilice, por ejemplo, MinGW .
  4. Mucho mas
  5. Además, hay muchos compiladores en línea como http://ideone.com , https://www.onlinegdb.com/ y http://coliru.stacked-crooked.com/ , además de muchos más (en su mayoría son buenos para probar ideas y escribir programas muy pequeños).
  6. Tanto Clang / LLVM como GCC son software gratuito compiladores de admiten versiones recientes de C ++.

Lamentablemente, algunas escuelas / profesores parecen obligar a los estudiantes a usar Turbo C ++ incluso en esta época. Desafortunadamente, esto no es algo que esta comunidad pueda solucionar. Si se encuentra en esta situación, prepárese para no poder obtener mucha ayuda externa.

norte. 'pronombres' m.
fuente
7
@ Rakete1111 Creo que es más en el sentido de "Este programa no contiene ningún problema según el estándar actual". Si es un buen estilo de programación es otra cosa.
Sombrero Chicken
21
@ Rakete1111 no hay nada de malo en el uso responsable de using namespace std. Puede que sea una buena decisión pedagógica o no enseñarlo a nuevos programadores, pero no es moralmente incorrecto en sí mismo.
n. 'pronombres' m.
10
Estoy de acuerdo en que using namespace stdes una mala práctica, pero creo que pertenece a esta pregunta, porque los programas hello world de C ++ que encuentras en línea casi siempre lo hacen. Así que es importante tener claro que eso no es lo que hace infeliz a Turbo C ++. Quizás en lugar de "No hay problema con este programa", diga "Este programa es válido, de acuerdo con el estándar actual de C ++; debería compilarse".
zwol
5
@Puppy de la misma manera, todas las llamadas a funciones estándar son irresponsables, porque no sabe qué nuevas sobrecargas se agregarán. Tampoco sabe qué características del idioma desaparecerán del siguiente estándar o cambiarán de significado. No todos los programas necesitan vivir durante décadas o ser portables a compiladores arbitrarios.
n. 'pronombres' m.
6
"Poca gente recuerda Turbo C ++" No estoy de acuerdo. Al menos un país grande y completo se lo está enseñando activamente hoy .
Lightness Races in Orbit
11

"Turbo C ++" puede significar numerosos compiladores. Al hacer esta pregunta, es importante incluir el número de versión.

  • Borland Turbo C ++ hasta la versión 3.1 eran compiladores puros de MS DOS en el IDE de fondo azul clásico. Estos fueron lanzados aproximadamente en algún lugar entre 1989 y 1992, mucho antes de que C ++ se estandarizara, lo que sucedió en el año 1998. Y entonces usaron un dialecto pre-estándar de C ++.

    En particular, usaron la #include <iostream.h>sintaxis en lugar del estándar #include <iostream>, pero tampoco cubrieron muchas características de C ++ como espacios de nombres, plantillas, etc. La biblioteca de plantillas STL aún no formaba parte del estándar, por lo que todo lo relacionado con esa biblioteca era bastante diferente de lo que luego se convirtió en estándar.

  • Más tarde, en los años 90, Borland lanzó varios compiladores de DOS / Windows con una mejor conformidad. Hasta la versión 5, en algún lugar, todavía tenían problemas con la completa conformidad con C ++ 98, aunque estas versiones de Windows estaban bastante cerca de eso.

  • A finales de los 90, dejaron caer el nombre "Turbo C ++" en favor de Borland C ++ Builder, que no era solo un IDE sino una herramienta RAD completa basada en Delphi. Estos compiladores eran totalmente compatibles con C ++ 98 y posteriores C ++ 03.

  • Alrededor de 2005, Borland eliminó los compiladores como parte de su línea de productos. Los compiladores se convirtieron en "Codegear", que luego se convirtió en Embarcadero. En algún momento, lanzaron una versión gratuita de Borland Builder que llamaron "Turbo C ++". Esta versión se ajustaba completamente a C ++ 03.

  • Hoy en día estos compiladores se llaman Embarcadero C ++ Builder. Creo que actualmente admiten hasta C ++ 11 con algunos C ++ 14. Más info aquí.

No hace falta decir que, como estudiante, no debe usar nada más que compiladores modernos. Usar compiladores de MS DOS de 1991 al aprender C ++ en el año 2018 es simplemente una locura. No solo es contraproducente, es directamente dañino y te convertirá en un mal programador de C ++. Si su escuela le obliga a usar Turbo C ++ 3.1 o más, entonces su escuela es mala y sus profesores son muy incompetentes. Por favor, vincule esta publicación a ellos y a su director.

Lundin
fuente
Turbo C ++ sigue siendo común en India en 2020 . Más y más : "Eso es 40 años de antigüedad Turbo C. Las universidades indias todavía lo enseñan y se niegan a enseñar cualquier otra cosa. Me dieron cero puntos, porque usé en std::stringlugar de char *en los exámenes, porque no saben que C ++ está estandarizado y char *es obsoleto." .
Peter Mortensen
@PeterMortensen Sí ... está algo bien para enseñar C90 (curiosamente, todavía es mejor en eso que Visual Studio de 2020), pero el dialecto de C ++ que usaba estaba loco.
Lundin
7

Turbo C ++ es un compilador muy antiguo y es un poco diferente del compilador GNU C ++. El código que compartió funcionará perfectamente con el compilador GNU, pero para ejecutarlo con Turbo C ++ debe realizar algunos cambios:

1. Cambie el nombre del archivo de encabezado de iostreama iostream.h
2. Y elimine la línea "using namespace std" No es requerido en Turbo C ++. Aquí está el código modificado:

#include <iostream.h>

int main() 
{
  cout << "Hello, World!";
  return 0;
}
Yougansh Thakur
fuente
6
¿Qué agrega su respuesta que el aceptado no?
Rakete1111
7
esencial para las personas que no tienen tiempo para leer respuestas largas.
Yougansh Thakur
no es "un poquito diferente" sino muy diferente de los compiladores de C ++
phuclv