Comecei a aprender C ++ para minha aula de programação. Baixei este programa "Hello World":
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, World!";
return 0;
}
mas Turbo C ++ reclama:
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'
O que há de errado com este programa tão simples? Como posso corrigir esses erros?
Respostas:
Não há problema com este programa. (Exceto provavelmente alguns problemas estilísticos -
using namespace std
não é recomendado). O problema é com o Turbo C ++. É um software muito antigo. Ele implementa um dialeto de C ++, o chamado pré-ANSI C ++ , que caiu completamente em desuso no início deste milênio. O primeiro padrão ANSI para C ++ foi publicado em 1998, depois houve a versão 2003, a versão 2011, a versão 2014, a versão 2017 e agora esperamos que a versão 2020 seja publicada oficialmente. Cada uma dessas revisões padrão trouxe mudanças mais ou menos significativas para o idioma.Para Turbo C ++, você deve modificar o programa assim:
Se você olhar para este programa, a diferença entre o dialeto C ++ moderno e aquele aceito pelo Turbo C ++ pode parecer pequena. No entanto, ele se tornará muito maior à medida que seus programas ficarem mais complexos.
Embora você possa aprender a programar usando o Turbo C ++, recomendo fortemente que evite isso se for humanamente possível devido aos seguintes problemas:
Existem muitos compiladores e IDEs gratuitos modernos (como na cerveja e também na fala ) que você pode usar no lugar do Turbo C ++. Alguns deles incluem:
Lamentavelmente, algumas escolas / professores parecem forçar os alunos a usar o Turbo C ++ mesmo hoje em dia. Infelizmente, isso não é algo que esta comunidade possa consertar. Se você se encontrar nessa situação, prepare-se para não conseguir obter muita ajuda externa.
fonte
using namespace std
. Pode ou não ser uma boa decisão pedagógica ensiná-lo a novos programadores, mas não é moralmente errado per se.using namespace std
é uma má prática, mas acho que pertence a esta questão, porque os programas C ++ hello world que você encontra online quase sempre fazem isso. Portanto, é importante deixar claro que não é isso que está deixando o Turbo C ++ infeliz. Talvez, em vez de "Não há problema com este programa", diga "Este programa é válido, de acordo com o padrão C ++ atual ; ele deve ser compilado.""Turbo C ++" pode significar vários compiladores. Ao fazer esta pergunta, é importante incluir o número da versão.
Borland Turbo C ++ até a versão 3.1 eram compiladores MS DOS puros no IDE clássico de fundo azul. Eles foram lançados em algum lugar entre 1989 e 1992, muito antes do C ++ se tornar padronizado, o que aconteceu no ano de 1998. E então eles usaram um dialeto pré-padrão do C ++.
Mais notavelmente, eles usaram a
#include <iostream.h>
sintaxe em vez do padrão#include <iostream>
, mas também não cobriram muitos recursos C ++ como namespaces, modelos etc. A biblioteca de modelos STL ainda não fazia parte do padrão, então tudo relacionado a essa biblioteca era bonito diferente do que mais tarde se tornou padrão.Mais tarde, na década de 90, a Borland lançou vários compiladores DOS / Windows com melhor conformidade. Em algum lugar, até a versão 5, eles ainda lutavam para cumprir totalmente a conformidade com o C ++ 98, embora essas versões do Windows estivessem bem próximas disso.
No final dos anos 90, eles abandonaram o nome "Turbo C ++" em favor do Borland C ++ Builder, que não era apenas um IDE, mas uma ferramenta RAD completa baseada em Delphi. Esses compiladores eram totalmente compatíveis com C ++ 98 e C ++ 03 posterior.
Por volta de 2005, a Borland abandonou os compiladores como parte de sua linha de produtos. Os compiladores se tornaram "Codegear", que mais tarde se tornou Embarcadero. Em algum momento, eles lançaram uma versão gratuita do Borland Builder que chamaram de "Turbo C ++". Esta versão estava totalmente em conformidade com C ++ 03.
Hoje em dia, esses compiladores são chamados de Embarcadero C ++ Builder. Acredito que atualmente eles suportam até C ++ 11 com alguns C ++ 14. Mais informações aqui.
Nem é preciso dizer que, como estudante, você não deve usar nada além de compiladores modernos. Usar compiladores MS DOS de 1991 ao aprender C ++ no ano de 2018 é simplesmente uma loucura. Além de ser contraproducente, é diretamente prejudicial e tornará você um péssimo programador de C ++. Se sua escola está forçando você a usar o Turbo C ++ 3.1 ou mais antigo, então sua escola é ruim e seus professores são extremamente incompetentes. Por favor, link esta postagem para eles e seu diretor.
fonte
std::string
vez dechar *
nos exames, porque eles não sabem que C ++ é padronizado echar *
está obsoleto. " .Turbo C ++ é um compilador muito antigo e um pouco diferente do compilador GNU C ++. O código que você compartilhou funcionará perfeitamente com o compilador GNU, mas para executá-lo com Turbo C ++ você precisa fazer algumas alterações:
1. Altere o nome do arquivo de cabeçalho de
iostream
paraiostream.h
2. E remova a linha "using namespace std" Não é exigido no Turbo C ++. Aqui está o código modificado:
fonte