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?
Réponses:
Il n'y a aucun problème avec ce programme. (Sauf probablement quelques problèmes de style -
using namespace std
n'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:
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:
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:
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.
la source
using 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.using namespace std
c'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é.""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.
la source
std::string
lieu dechar *
dans les examens, parce qu'ils ne savent pas que C ++ est standardisé etchar *
est obsolète. " .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é:
la source