Warum wird ein einfaches Programm im "Hello World" -Stil nicht mit Turbo C ++ kompiliert?

101

Ich habe angefangen, C ++ für meine Programmierklasse zu lernen. Ich habe dieses "Hello World" -Programm heruntergeladen:

#include <iostream>
using namespace std;

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

aber Turbo C ++ beschwert sich:

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'

Was ist los mit diesem sehr einfachen Programm? Wie kann ich diese Fehler korrigieren?

n. 'Pronomen' m.
quelle
39
Dies ist eine Standard-Dupe-Weiterleitung für Fragen zu Turbo C ++ - Problemen. Viele dieser Fragen werden in der Regel mit nur einer kurzen Erklärung in den Kommentaren schnell abgeschossen, während sie wirklich eine richtige Antwort verwenden können. Verbesserungen sind willkommen.
n. 'Pronomen' m.
6
Schlagen Sie vor, zu erwähnen, welche Version von Turbo C ++ Sie verwenden. Die Version 2006 hat dieses Programm gemeistert.
MM
5
"Ich habe angefangen, C ++ für meine Programmierklasse zu lernen." Das ist eine Lüge. Zeitraum.
Bugwheels94
5
@ bugwheels94 Siehe hier .
n. 'Pronomen' m.
5
@nm Ich weiß nicht, ob Bugwheells dies bedeuteten, aber ich habe sie so verstanden, dass wenn man TurboC ++ lernt (insbesondere altes TurboC ++, das dies nicht kompiliert), sie nicht C ++ lernen (was viele Leute, ich eingeschlossen) implizit als Standard- C ++).
Eerorika

Antworten:

158

Es gibt kein Problem mit diesem Programm. (Außer wahrscheinlich einigen Stilproblemen - using namespace stdwird nicht empfohlen). Das Problem ist mit Turbo C ++. Es ist eine sehr alte Software. Es implementiert einen Dialekt von C ++, das sogenannte Pre-ANSI-C ++ , das zu Beginn dieses Jahrtausends völlig außer Betrieb war. Der erste ANSI-Standard für C ++ wurde 1998 veröffentlicht, dann gab es die Version 2003, die Version 2011, die Version 2014, die Version 2017, und jetzt erwarten wir, dass die Version 2020 offiziell veröffentlicht wird. Jede dieser Standardrevisionen brachte mehr oder weniger bedeutende Änderungen in der Sprache mit sich.

Für Turbo C ++ müssen Sie das Programm folgendermaßen ändern:

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

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

Wenn Sie sich dieses Programm ansehen, scheint der Unterschied zwischen dem modernen C ++ - Dialekt und dem von Turbo C ++ akzeptierten gering zu sein. Es wird jedoch viel größer, da Ihre Programme immer komplexer werden.

Obwohl Sie das Programmieren mit Turbo C ++ lernen können, würde ich dringend empfehlen, dies zu vermeiden, wenn dies aufgrund der folgenden Probleme menschlich möglich ist:

  1. Sie werden eine Sprache lernen, die einer in der Branche verwendeten populären Sprache etwas ähnelt, sich jedoch ohne guten Grund stark unterscheidet. Wenn Sie C ++ für echte Softwareentwicklung schreiben möchten, müssen Sie viel neu lernen. Es ist viel einfacher, modernes C ++ sofort zu lernen.
  2. Es gibt keine Literatur über Turbo C ++. Fast 100% des C ++ - Materials, das Sie im Internet oder in den Büchern finden, ist nicht direkt auf Turbo C ++ anwendbar. Einige müssen nur geringfügig angepasst werden, während andere Materialien völlig unbrauchbar sind. Die einzige sofort verfügbare Hilfequelle ist die integrierte Turbo C ++ - Hilfe.
  3. Nur wenige Menschen erinnern sich an Turbo C ++. Geben Sie beim Stellen von Fragen in Foren immer an, dass Sie einen Pre-ANSI-Dialekt verwenden, um Antworten herauszufiltern, die auf die moderne Version der Sprache ausgerichtet sind. Sie werden wahrscheinlich eine Reihe von Kommentaren erhalten, die Sie auffordern, sofort anzuhalten und bei jeder Frage zu einem modernen Compiler zu wechseln.

Es gibt viele moderne kostenlose Compiler und IDEs (wie sowohl in Bier als auch in Sprache ), die Sie anstelle von Turbo C ++ verwenden können. Einige davon sind:

  1. Visual C ++ Community Edition ist eine IDE und ein Compiler von Microsoft
  2. Code :: Blocks ist eine leichte IDE. Unter Windows wird ein etwas veralteter Compiler mitgeliefert, Sie können jedoch selbst einen moderneren Compiler installieren
  3. Eclipse CDT ist eine leistungsstarke plattformübergreifende IDE. Es wird nicht mit einem eigenen Compiler geliefert, daher müssen Sie einen separaten Compiler installieren. Verwenden Sie unter Windows zB MinGW .
  4. Viel mehr
  5. Darüber hinaus gibt es viele Online-Compiler wie http://ideone.com , https://www.onlinegdb.com/ und http://coliru.stacked-crooked.com/ sowie viele weitere (diese sind meistens gut) zum Ausprobieren von Ideen und zum Schreiben sehr kleiner Programme).
  6. Sowohl Clang / LLVM als auch GCC sind freie Software- Compiler, die aktuelle Versionen von C ++ unterstützen.

Bedauerlicherweise scheinen einige Schulen / Lehrer die Schüler zu zwingen, Turbo C ++ auch heute noch zu verwenden. Leider kann diese Community dies nicht beheben. Wenn Sie sich in dieser Situation befinden, bereiten Sie sich darauf vor, nicht viel Hilfe von außen zu bekommen.

n. 'Pronomen' m.
quelle
7
@ Rakete1111 Ich denke, es ist eher im Sinne von "Dieses Programm enthält kein Problem nach dem aktuellen Standard." Ob es ein guter Programmierstil ist, ist eine andere Sache.
Sombrero Chicken
21
@ Rakete1111 Es ist nichts falsch mit verantwortungsvollem Umgang mit using namespace std. Es mag eine gute pädagogische Entscheidung sein oder auch nicht, es neuen Programmierern beizubringen, aber es ist an sich nicht moralisch falsch.
n. 'Pronomen' m.
10
Ich bin damit einverstanden, dass dies using namespace stdeine schlechte Praxis ist, aber ich denke, dass sie in diese Frage gehört, da die C ++ - Hallo-Welt-Programme, die Sie online finden, dies fast immer tun. Es ist also wichtig klar zu sein, dass dies Turbo C ++ nicht unglücklich macht. Vielleicht sagen Sie anstelle von "Es gibt kein Problem mit diesem Programm" "Dieses Programm ist gemäß dem aktuellen C ++ - Standard gültig ; es sollte kompiliert werden."
zwol
5
@Puppy aus dem gleichen Grund sind alle Aufrufe von Standardfunktionen unverantwortlich, da Sie nicht wissen, welche neuen Überladungen hinzugefügt werden. Sie wissen auch nicht, welche Sprachfunktionen aus dem nächsten Standard verschwinden oder die Bedeutung ändern. Nicht alle Programme müssen jahrzehntelang leben oder für beliebige Compiler portierbar sein.
n. 'Pronomen' m.
6
"Nur wenige Leute erinnern sich an Turbo C ++" Ich bin anderer Meinung. Mindestens eine ganze, wird großes Land aktiv gelehrt , heute .
Leichtigkeitsrennen im Orbit
11

"Turbo C ++" kann zahlreiche Compiler bedeuten. Wenn Sie diese Frage stellen, ist es wichtig, die Versionsnummer anzugeben.

  • Borland Turbo C ++ bis Version 3.1 waren reine MS DOS-Compiler in der klassischen blauen Hintergrund-IDE. Diese wurden ungefähr zwischen 1989 und 1992 veröffentlicht, lange bevor C ++ standardisiert wurde, was im Jahr 1998 geschah. Deshalb verwendeten sie einen vorstandardisierten Dialekt von C ++.

    Vor allem verwendeten sie die #include <iostream.h>Syntax anstelle des Standards #include <iostream>, deckten aber auch nicht viele C ++ - Funktionen wie Namespaces, Vorlagen usw. ab. Die Vorlagenbibliothek STL war noch nicht Teil des Standards, sodass alles, was mit dieser Bibliothek zu tun hatte, hübsch war anders als das, was später Standard wurde.

  • Später in den 90er Jahren veröffentlichte Borland mehrere DOS / Windows-Compiler mit besserer Konformität. Bis zu Version 5 hatten sie irgendwo noch Probleme mit der vollständigen Konformität mit C ++ 98, obwohl diese Windows-Versionen ziemlich nahe daran waren.

  • In den späten 90ern wurde der Name "Turbo C ++" zugunsten von Borland C ++ Builder gestrichen, das nicht nur eine IDE, sondern ein vollständiges RAD-Tool auf Delphi-Basis war. Diese Compiler waren vollständig kompatibel mit C ++ 98 und höher C ++ 03.

  • Um 2005 hat Borland Compiler als Teil seiner Produktlinie eingestellt. Die Compiler wurden zu "Codegear", das später zu Embarcadero wurde. Irgendwann veröffentlichten sie eine kostenlose Version von Borland Builder mit dem Namen "Turbo C ++". Diese Version entsprach vollständig C ++ 03.

  • Heutzutage heißen diese Compiler Embarcadero C ++ Builder. Ich glaube, sie unterstützen derzeit bis zu C ++ 11 mit einigen C ++ 14. Mehr Infos hier.

Natürlich sollten Sie als Student nur moderne Compiler verwenden. Die Verwendung von MS DOS-Compilern aus dem Jahr 1991 beim Erlernen von C ++ im Jahr 2018 ist einfach Wahnsinn. Es ist nicht nur kontraproduktiv, es ist auch direkt schädlich und macht Sie zu einem schlechten C ++ - Programmierer. Wenn Ihre Schule Sie zwingt, Turbo C ++ 3.1 oder älter zu verwenden, ist Ihre Schule schlecht und Ihre Lehrer sind stark inkompetent. Bitte verlinken Sie diesen Beitrag mit ihnen und ihrem Auftraggeber.

Lundin
quelle
Turbo C ++ ist in Indien im Jahr 2020 immer noch üblich . Mehr und mehr - . „Die 40 Jahre alt ist veraltet Turbo C. indische Hochschulen noch lehren sie und Abfall zu lehren etwas anderes Sie gaben mir Nullmarken, weil ich verwenden , std::stringanstatt char *in Prüfungen, weil sie nicht wissen , dass C ++ ist standardisiert und char *ist veraltet.".
Peter Mortensen
@PeterMortensen Ja ... es ist etwas in Ordnung, C90 zu unterrichten (amüsanterweise ist es immer noch besser als Visual Studio aus dem Jahr 2020), aber der verwendete C ++ - Dialekt war nur drunter und drüber.
Lundin
7

Turbo C ++ ist ein sehr alter Compiler und unterscheidet sich ein wenig vom GNU C ++ - Compiler. Der von Ihnen freigegebene Code funktioniert perfekt mit dem GNU-Compiler. Um ihn jedoch mit Turbo C ++ auszuführen, müssen Sie einige Änderungen vornehmen:

1. Ändern Sie den Namen der Header-Datei von iostreamin iostream.h
2. Und entfernen Sie die Zeile "using namespace std". Dies ist nicht der Fall erforderlich in Turbo C ++. Hier ist der geänderte Code:

#include <iostream.h>

int main() 
{
  cout << "Hello, World!";
  return 0;
}
Yougansh Thakur
quelle
5
Was fügt Ihre Antwort hinzu, was die akzeptierte nicht tut?
Rakete1111
7
Kern für die Leute, die keine Zeit haben, lange Antworten zu lesen.
Yougansh Thakur