Perché un semplice programma in stile "Hello World" non viene compilato con Turbo C ++?


101

Ho iniziato a imparare il C ++ per la mia classe di programmazione. Ho scaricato questo programma "Hello World":

#include <iostream>
using namespace std;

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

ma Turbo C ++ si lamenta:

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'

Cosa c'è di sbagliato in questo programma molto semplice? Come posso correggere questi errori?


39
Questo è inteso come un reindirizzamento dupe standard per domande sui problemi di Turbo C ++. Molte di queste domande tendono ad essere abbattute rapidamente con solo una breve spiegazione nei commenti, mentre possono davvero usare una risposta adeguata. Sono graditi miglioramenti.
n. 'pronomi' m.

6
suggerire di menzionare quale versione di Turbo C ++ stai utilizzando. La versione del 2006 ha affrontato questo programma.
MM

5
"Ho iniziato a imparare il C ++ per la mia classe di programmazione.". Questa è una bugia. Periodo.
bugwheels94

5
@ bugwheels94 Vedi questo .
n. 'pronomi' m.

5
@nm Non so se i bugwheells intendessero questo, ma li ho interpretati nel senso che se uno viene insegnato TurboC ++ (in particolare, il vecchio TurboC ++ che non riesce a compilare questo), allora non stanno imparando C ++ (che molte persone, me incluso , assume implicitamente che significhi C ++ standard ).
eerorika

Risposte:


158

Non ci sono problemi con questo programma. (Tranne probabilmente alcuni problemi stilistici - using namespace stdnon è raccomandato). Il problema è con Turbo C ++. È un software molto vecchio. Implementa un dialetto di C ++, il cosiddetto C ++ pre-ANSI , che è completamente caduto in disuso all'inizio di questo millennio. Il primo standard ANSI per C ++ è stato pubblicato nel 1998, poi c'era la versione 2003, la versione 2011, la versione 2014, la versione 2017 e ora ci aspettiamo che la versione 2020 venga pubblicata ufficialmente. Ciascuna di queste revisioni standard ha apportato modifiche più o meno significative alla lingua.

Per Turbo C ++ devi modificare il programma in questo modo:

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

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

Se guardi questo programma, la differenza tra il moderno dialetto C ++ e quello accettato da Turbo C ++ può sembrare piccola. Tuttavia diventerà molto più grande man mano che i tuoi programmi diventeranno più complessi.

Sebbene tu possa imparare a programmare usando Turbo C ++, ti consiglio vivamente di evitarlo se umanamente possibile a causa dei seguenti problemi:

  1. Imparerai una lingua che è in qualche modo simile a una lingua popolare utilizzata nel settore, ma è comunque molto diversa, senza una buona ragione. Se prevedi di scrivere C ++ per lo sviluppo di software reale, dovrai imparare di nuovo molto. È molto più facile imparare subito il C ++ moderno.
  2. Non c'è letteratura esistente su Turbo C ++. Quasi il 100% del materiale C ++ che troverai su Internet o nei libri non è direttamente applicabile a Turbo C ++ fuori dagli schemi. Alcuni avranno bisogno solo di piccoli adattamenti, mentre altri materiali sono completamente inutilizzabili. Praticamente l'unica fonte di aiuto immediatamente disponibile è l'aiuto integrato di Turbo C ++.
  3. Poche persone ricordano Turbo C ++. Quando poni domande sui forum, specifica sempre che stai utilizzando un dialetto pre-ANSI per filtrare le risposte orientate verso la versione moderna del linguaggio. Probabilmente riceverai un sacco di commenti che ti suggeriscono di fermarti immediatamente e passare a un compilatore moderno per ogni domanda che fai.

Ci sono molti compilatori e IDE gratuiti moderni (come nella birra , così come nel parlato ) che puoi usare al posto di Turbo C ++. Alcuni di questi includono:

  1. Visual C ++ Community Edition è un IDE e un compilatore di Microsoft
  2. Code :: Blocks è un IDE leggero. Su Windows viene fornito con un compilatore un po 'obsoleto, ma puoi installare tu stesso un compilatore più moderno
  3. Eclipse CDT è un potente IDE multipiattaforma. Non viene fornito con il proprio compilatore, quindi è necessario installare un compilatore separato. Su Windows, usa ad esempio MinGW .
  4. Molti altri
  5. Inoltre, ci sono molti compilatori online come http://ideone.com , https://www.onlinegdb.com/ e http://coliru.stacked-crooked.com/ , più molti altri (questi sono per lo più buoni per provare idee e scrivere programmi molto piccoli).
  6. Sia Clang / LLVM che GCC sono compilatori software gratuiti che supportano le versioni recenti di C ++.

Purtroppo, alcune scuole / insegnanti sembrano costringere gli studenti a usare Turbo C ++ anche in questo giorno ed età. Sfortunatamente questo non è qualcosa che questa comunità può risolvere. Se ti trovi in ​​questa situazione, preparati a non poter ricevere molto aiuto dall'esterno.


7
@ Rakete1111 Penso che sia più nel senso di "Questo programma non contiene problemi secondo lo standard attuale". Che sia un buon stile di programmazione è un'altra cosa.
Pollo Sombrero

21
@ Rakete1111 non c'è niente di sbagliato nell'uso responsabile di using namespace std. Può essere o meno una buona decisione pedagogica insegnarlo a nuovi programmatori, ma non è moralmente sbagliato di per sé.
n. 'pronomi' m.

10
Sono d'accordo che using namespace stdsia una cattiva pratica, ma penso che appartenga a questa domanda, perché i programmi hello world in C ++ che trovi online lo fanno quasi sempre. Quindi è importante essere chiari che non è questo ciò che rende Turbo C ++ infelice. Forse invece di "Non c'è problema con questo programma" dite "Questo programma è valido, secondo l' attuale standard C ++; dovrebbe compilare".
zwol

5
@Puppy per lo stesso motivo, tutte le chiamate alle funzioni standard sono irresponsabili, perché non sai quali nuovi sovraccarichi verranno aggiunti. Inoltre, non sai quali caratteristiche della lingua scompariranno dal prossimo standard o cambieranno significato. Non tutti i programmi devono vivere per decenni o essere trasferibili su compilatori arbitrari.
n. 'pronomi' m.

6
"Poche persone ricordano Turbo C ++" Non sono d'accordo. Almeno un intero, grande paese lo sta attivamente insegnando oggi .
Gare di leggerezza in orbita il

11

"Turbo C ++" può significare numerosi compilatori. Quando si pone questa domanda, è importante includere il numero di versione.

  • I Borland Turbo C ++ fino alla versione 3.1 erano compilatori MS DOS puri nel classico IDE con sfondo blu. Questi sono stati rilasciati all'incirca tra il 1989 e il 1992, molto prima che il C ++ diventasse standardizzato, cosa che avvenne nel 1998. E così usarono un dialetto pre-standard di C ++.

    In particolare, utilizzavano la #include <iostream.h>sintassi piuttosto che lo standard #include <iostream>, ma non coprivano molte funzionalità C ++ come spazi dei nomi, modelli ecc. La libreria di modelli STL non faceva ancora parte dello standard, quindi tutto ciò che riguarda quella libreria era carino diverso da quello che in seguito divenne standard.

  • Più tardi negli anni '90, Borland ha rilasciato diversi compilatori DOS / Windows con una migliore conformità. Fino alla versione 5 da qualche parte hanno ancora lottato con la completa conformità a C ++ 98, sebbene queste versioni di Windows fossero abbastanza vicine ad essa.

  • Alla fine degli anni '90, hanno abbandonato il nome "Turbo C ++" a favore di Borland C ++ Builder, che non era solo un IDE ma uno strumento RAD completo basato su Delphi. Questi compilatori erano completamente compatibili con C ++ 98 e successivo C ++ 03.

  • Intorno al 2005, Borland ha abbandonato i compilatori come parte della sua linea di prodotti. I compilatori sono diventati "Codegear", che in seguito è diventato Embarcadero. Da qualche parte allora, hanno rilasciato una versione gratuita di Borland Builder che hanno chiamato "Turbo C ++". Questa versione era completamente conforme a C ++ 03.

  • Al giorno d'oggi questi compilatori sono chiamati Embarcadero C ++ Builder. Credo che attualmente supportino fino a C ++ 11 con alcuni C ++ 14. Maggiori info qui.

Inutile dire che come studente non dovresti usare nient'altro che compilatori moderni. Usare i compilatori MS DOS del 1991 quando si impara il C ++ nel 2018 è semplicemente una follia. Non solo è controproducente, è direttamente dannoso e ti renderà un cattivo programmatore C ++. Se la tua scuola ti obbliga a usare Turbo C ++ 3.1 o precedente, allora la tua scuola è pessima e i tuoi insegnanti sono gravemente incompetenti. Collega questo post a loro e al loro preside.


Turbo C ++ è ancora comune in India nel 2020 . Più e più - . "E '40 anni obsolete collegi Turbo C. indiani ancora insegnano e si rifiutano di insegnare niente altro mi hanno dato tacche di zero, perché ho usato std::stringinvece che char *negli esami, perché non sanno che C ++ è standardizzata e char *è deprecato. " .
Peter Mortensen

@PeterMortensen Sì ... è un po 'ok per insegnare C90 (divertente, è ancora meglio di Visual Studio del 2020), ma il dialetto C ++ che ha usato era semplicemente in tilt.
Lundin

7

Turbo C ++ è un compilatore molto vecchio ed è leggermente diverso dal compilatore GNU C ++. Il codice che hai condiviso funzionerà perfettamente con il compilatore GNU ma per eseguirlo con Turbo C ++ devi apportare alcune modifiche:

1. Cambia il nome del file di intestazione da iostreama iostream.h
2. E rimuovi la riga "using namespace std" Non lo è richiesto in Turbo C ++. Ecco il codice modificato:

#include <iostream.h>

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

6
Cosa aggiunge la tua risposta che quella accettata non lo fa?
Rakete1111

7
Sintesi per le persone che non hanno tempo per leggere risposte lunghe.
Yougansh Thakur

non è "un po 'diverso" ma molto diverso dai compilatori C ++
phuclv
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.