Pourquoi un simple programme de type «Hello World» ne se compile-t-il pas avec Turbo C ++?

101

J'ai commencé à apprendre le C ++ pour ma classe de programmation. J'ai téléchargé ce programme "Hello World":

#include <iostream>
using namespace std;

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

mais Turbo C ++ se plaint:

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'

Quel est le problème avec ce programme très simple? Comment puis-je corriger ces erreurs?

n. «pronoms» m.
la source
39
Ceci est destiné à être une redirection de dupe standard pour les questions concernant les problèmes de Turbo C ++. Beaucoup de ces questions ont tendance à être abattues rapidement avec seulement une brève explication dans les commentaires, alors qu'elles peuvent vraiment utiliser une bonne réponse. Les améliorations sont les bienvenues.
n. «pronoms» m.
6
suggérez de mentionner la version de Turbo C ++ que vous utilisez. La version 2006 a fait face à ce programme.
MM
5
"J'ai commencé à apprendre le C ++ pour ma classe de programmation.". Ceci est un mensonge. Période.
bugwheels94
5
@ bugwheels94 Voir ça .
n. «pronoms» m.
5
@nm Je ne sais pas si bugwheells signifiait cela, mais je les ai pris pour signifier que si l'on apprend TurboC ++ (en particulier, l'ancien TurboC ++ qui ne parvient pas à compiler cela), alors ils n'apprennent pas C ++ (ce que beaucoup de gens, moi inclus , supposent implicitement signifier C ++ standard ).
eerorika

Réponses:

158

Il n'y a aucun problème avec ce programme. (Sauf probablement quelques problèmes de style - using namespace stdn'est pas recommandé). Le problème est avec Turbo C ++. C'est un logiciel très ancien. Il implémente un dialecte de C ++, dit pré-ANSI C ++ , qui a complètement cessé d'être utilisé au début de ce millénaire. La première norme ANSI pour C ++ a été publiée en 1998, puis il y a eu la version 2003, la version 2011, la version 2014, la version 2017, et maintenant nous prévoyons que la version 2020 sera officiellement publiée. Chacune de ces révisions standard a apporté des changements plus ou moins significatifs au langage.

Pour Turbo C ++, vous devez modifier le programme comme ceci:

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

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

Si vous regardez ce programme, la différence entre le dialecte C ++ moderne et celui accepté par Turbo C ++ peut sembler minime. Cependant, il deviendra beaucoup plus grand à mesure que vos programmes deviendront plus complexes.

Bien que vous puissiez apprendre la programmation à l'aide de Turbo C ++, je vous recommande fortement d'éviter cela si cela est humainement possible en raison des problèmes suivants:

  1. Vous apprendrez une langue qui est quelque peu similaire à une langue populaire utilisée dans l'industrie, mais qui est néanmoins très différente, sans raison valable. Si vous envisagez d'écrire du C ++ pour un vrai développement logiciel, vous devrez beaucoup réapprendre. Il est beaucoup plus facile d'apprendre tout de suite le C ++ moderne.
  2. Il n'y a pas de littérature existante sur Turbo C ++. Près de 100% du matériel C ++ que vous trouverez sur Internet ou dans les livres n'est pas directement applicable à Turbo C ++ prêt à l'emploi. Certains n'auront besoin que d'une adaptation mineure, tandis que d'autres matériaux sont complètement inutilisables. À peu près la seule source d'aide immédiatement disponible pour vous est l'aide intégrée Turbo C ++.
  3. Peu de gens se souviennent de Turbo C ++. Lorsque vous posez des questions sur les forums, spécifiez toujours que vous utilisez un dialecte pré-ANSI afin de filtrer les réponses orientées vers la version moderne du langage. Vous obtiendrez probablement un tas de commentaires vous suggérant de vous arrêter immédiatement et de passer à un compilateur moderne à chaque question que vous posez.

Il existe de nombreux compilateurs et IDE modernes et gratuits (comme dans la bière , ainsi que dans la parole ) que vous pouvez utiliser à la place de Turbo C ++. Certains d'entre eux incluent:

  1. Visual C ++ Community Edition est un IDE et un compilateur de Microsoft
  2. Code :: Blocks est un IDE léger. Sous Windows, il est livré avec un compilateur quelque peu obsolète, mais vous pouvez installer vous-même un compilateur plus moderne
  3. Eclipse CDT est un puissant IDE multiplateforme. Il n'est pas livré avec son propre compilateur, vous devez donc installer un compilateur séparé. Sous Windows, utilisez par exemple MinGW .
  4. Beaucoup plus
  5. En outre, il existe de nombreux compilateurs en ligne tels que http://ideone.com , https://www.onlinegdb.com/ et http://coliru.stacked-crooked.com/ , ainsi que bien d'autres (ils sont généralement bons pour essayer des idées et écrire de très petits programmes).
  6. Les deux Clang / LLVM et GCC sont les logiciels libres compilateurs supportant les versions récentes de C ++.

Malheureusement, certaines écoles / enseignants semblent forcer les élèves à utiliser Turbo C ++ même à notre époque. Malheureusement, ce n'est pas quelque chose que cette communauté peut résoudre. Si vous vous trouvez dans cette situation, préparez-vous à ne pas pouvoir obtenir beaucoup d'aide extérieure.

n. «pronoms» m.
la source
7
@ Rakete1111 Je pense que c'est plus dans le sens de "Ce programme ne contient aucun problème selon la norme actuelle." Que ce soit un bon style de programmation est une autre chose.
Poulet Sombrero le
21
@ Rakete1111 il n'y a rien de mal à utiliser de manière responsableusing namespace std . C'est peut-être une bonne décision pédagogique de l'enseigner à de nouveaux programmeurs, mais ce n'est pas moralement mauvais en soi.
n. «pronoms» m.
10
Je suis d'accord que using namespace stdc'est une mauvaise pratique, mais je pense que cela appartient à cette question, car les programmes C ++ hello world que vous trouvez en ligne le font presque toujours. Il est donc important d'être clair que ce n'est pas ce qui rend Turbo C ++ malheureux. Peut-être au lieu de "Il n'y a pas de problème avec ce programme", dites "Ce programme est valide, selon le standard C ++ actuel ; il devrait être compilé."
zwol
5
@Puppy par le même jeton, tous les appels aux fonctions standards sont irresponsables, car vous ne savez pas quelles nouvelles surcharges seront ajoutées. Vous ne savez pas non plus quelles fonctionnalités linguistiques disparaîtront de la prochaine norme ou changeront de signification. Tous les programmes n'ont pas besoin de vivre des décennies ou d'être portables vers des compilateurs arbitraires.
n. «pronoms» m.
6
"Peu de gens se souviennent de Turbo C ++" Je ne suis pas d'accord. Au moins un grand pays entier est activement enseigné aujourd'hui .
Courses de légèreté en orbite le
11

"Turbo C ++" peut signifier de nombreux compilateurs. Lorsque vous posez cette question, il est important d'inclure le numéro de version.

  • Borland Turbo C ++ jusqu'à la version 3.1 étaient de purs compilateurs MS DOS dans l'IDE classique à fond bleu. Ceux-ci ont été publiés à peu près quelque part entre 1989 et 1992, bien avant que le C ++ ne soit normalisé, ce qui s'est produit en 1998. Ils ont donc utilisé un dialecte pré-standard de C ++.

    Plus particulièrement, ils utilisaient la #include <iostream.h>syntaxe plutôt que le standard #include <iostream>, mais ne couvraient pas non plus un grand nombre de fonctionnalités C ++ telles que les espaces de noms, les modèles, etc. La bibliothèque de modèles STL ne faisait pas encore partie du standard, donc tout ce qui concernait cette bibliothèque était assez différent de ce qui est devenu plus tard la norme.

  • Plus tard dans les années 90, Borland a publié plusieurs compilateurs DOS / Windows avec une meilleure conformité. Jusqu'à la version 5, ils avaient encore du mal à se conformer complètement à C ++ 98, bien que ces versions de Windows en soient assez proches.

  • À la fin des années 90, ils ont abandonné le nom "Turbo C ++" en faveur de Borland C ++ Builder, qui n'était pas seulement un IDE mais un outil RAD complet basé sur Delphi. Ces compilateurs étaient entièrement compatibles avec C ++ 98 et plus tard C ++ 03.

  • Vers 2005, Borland a abandonné les compilateurs dans le cadre de sa gamme de produits. Les compilateurs sont devenus "Codegear", qui est devenu plus tard Embarcadero. Quelque part à l'époque, ils ont publié une version gratuite de Borland Builder qu'ils ont appelée "Turbo C ++". Cette version était entièrement conforme à C ++ 03.

  • De nos jours, ces compilateurs sont appelés Embarcadero C ++ Builder. Je pense qu'ils prennent actuellement en charge jusqu'à C ++ 11 avec du C ++ 14. Plus d'infos ici.

Inutile de dire qu'en tant qu'étudiant, vous ne devez utiliser que des compilateurs modernes. Utiliser des compilateurs MS DOS de 1991 lors de l'apprentissage du C ++ en 2018 est tout simplement de la folie. Non seulement il est contre-productif, mais il est directement nocif et fera de vous un mauvais programmeur C ++. Si votre école vous oblige à utiliser Turbo C ++ 3.1 ou une version antérieure, alors votre école est mauvaise et vos enseignants sont gravement incompétents. Veuillez lier ce message à eux et à leur principal.

Lundin
la source
Turbo C ++ est encore courant en Inde en 2020 . Plus et plus - . « Voilà 40 ans dépassés Turbo C. collèges indiens enseignent encore et refusent de quoi que ce soit d'enseigner sinon ils me ont donné zéro marques, parce que je au std::stringlieu de char *dans les examens, parce qu'ils ne savent pas que C ++ est standardisé et char *est obsolète. " .
Peter Mortensen le
@PeterMortensen Ouais ... c'est un peu correct pour enseigner le C90 (de manière amusante, c'est toujours mieux que Visual Studio à partir de 2020), mais le dialecte C ++ qu'il utilisait n'était que détraqué.
Lundin le
7

Turbo C ++ est un très ancien compilateur et il est un peu différent du compilateur GNU C ++. Le code que vous avez partagé fonctionnera parfaitement avec le compilateur GNU mais pour l'exécuter avec Turbo C ++, vous devez faire quelques changements:

1. Changez le nom du fichier d'en-tête de iostreamà iostream.h
2. Et supprimez la ligne "using namespace std" Ce n'est pas requis dans Turbo C ++. Voici le code modifié:

#include <iostream.h>

int main() 
{
  cout << "Hello, World!";
  return 0;
}
Yougansh Thakur
la source
6
Qu'est-ce que votre réponse ajoute que l'acceptation ne fait pas?
Rakete1111
7
l'essentiel pour les personnes qui n'ont pas le temps de lire de longues réponses.
Yougansh Thakur
ce n'est pas "un peu différent" mais très différent des compilateurs C ++
phuclv