Чому проста програма «Hello World» у стилі не компілюється з Turbo C ++?


101

Я почав вивчати C ++ для свого класу програмування. Я завантажив цю програму "Hello World":

#include <iostream>
using namespace std;

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

але Turbo C ++ скаржиться:

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'

Що з цим дуже простою програмою? Як я можу виправити ці помилки?


39
Це покликане стати стандартним перенаправленням дупа для запитань про проблеми Turbo C ++. Багато з цих питань, як правило, швидко знімаються лише з коротким поясненням у коментарях, хоча вони справді можуть використовувати правильну відповідь. Поліпшення вітаються.
н. 'займенники' м.

6
запропонуйте згадати, який випуск Turbo C ++ ви використовуєте. Версія 2006 року впоралася з цією програмою.
ММ

5
"Я почав вивчати C ++ для свого класу програмування." Це брехня. Період.
bugwheels94


5
@nm я не знаю, чи значили це помилки, але я вважав, що якщо хтось навчається TurboC ++ (зокрема, старий TurboC ++, який не в змозі це скомпілювати), то вони не навчаються C ++ (до чого входило багато мене, , мається на увазі, що означає стандартний C ++).
eerorika

Відповіді:


158

З цією програмою проблем немає. (За винятком певних стилістичних питань - using namespace stdне рекомендується). Проблема в Turbo C ++. Це дуже стара програма. Він реалізує діалект С ++, так званий до ANSI C ++ , який повністю вийшов з ужитку до початку цього тисячоліття. Перший стандарт ANSI для C ++ був опублікований у 1998 році, тоді була версія 2003, версія 2011, версія 2014, версія 2017, і тепер ми очікуємо, що версія 2020 буде офіційно опублікована. Кожна з цих стандартних змін внесла більш-менш суттєві зміни до мови.

Для Turbo C ++ ви повинні змінити програму так:

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

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

Якщо ви подивитеся на цю програму, різниця між сучасним діалектом C ++ та тією, яку прийняв Turbo C ++, може здатися невеликою. Однак він зростатиме набагато більше, оскільки ваші програми будуть ускладнюватися.

Хоча ви можете навчитися програмуванню за допомогою Turbo C ++, я настійно рекомендую уникати цього, якщо це можливо, через такі проблеми:

  1. Ви будете вивчати мову, яка дещо схожа на популярну мову, що використовується в галузі, але все ж сильно відрізняється без поважних причин. Якщо ви плануєте написати C ++ для реальної розробки програмного забезпечення, вам доведеться багато чого вивчити. Набагато простіше відразу вивчити сучасний C ++.
  2. Немає існуючої літератури про Turbo C ++. Майже 100% матеріалів на C ++, які ви знайдете в Інтернеті чи в книгах, безпосередньо не стосується Turbo C ++ поза коробкою. Деяким знадобиться лише незначна адаптація, тоді як інші матеріали абсолютно непридатні. Насправді єдиним доступним джерелом допомоги є вбудована допомога Turbo C ++.
  3. Мало хто пам’ятає Turbo C ++. Задаючи питання на форумах, завжди вказуйте, що ви використовуєте діалект перед ANSI, щоб відфільтрувати відповіді, орієнтовані на сучасну версію мови. Напевно ви отримаєте купу коментарів, які пропонують вам негайно зупинитись та перейти до сучасного компілятора з кожним запитанням.

Існує багато сучасних безкоштовних (як у пиві , так і в мовленні ) компіляторів та IDE, які ви можете використовувати замість Turbo C ++. Деякі з них включають:

  1. Visual C ++ Community Edition - це IDE і компілятор від Microsoft
  2. Код :: Блоки - це легкий IDE. У Windows він постачається з дещо застарілим компілятором, але ви можете встановити більш сучасний компілятор самостійно
  3. Eclipse CDT - це потужна міжплатформна IDE. Він не постачається з власним компілятором, тому вам потрібно встановити окремий компілятор. У Windows використовуйте, наприклад, MinGW .
  4. Набагато більше
  5. Окрім того, існує безліч онлайн-компіляторів, таких як http://ideone.com , https://www.onlinegdb.com/ та http://coliru.stacked-crooked.com/ , а також багато інших (це в основному хороші для випробування ідей та написання дуже невеликих програм).
  6. І Clang / LLVM, і GCC є компіляторами безкоштовного програмного забезпечення, що підтримують останні версії C ++.

На жаль, деякі школи / вчителі, мабуть, змушують учнів використовувати Turbo C ++ навіть у цей день та вік. На жаль, ця громада не може виправити це. Якщо ви опинитесь у цій ситуації, підготуйтеся до того, що не зможете отримати багато допомоги ззовні.


7
@ Rakete1111 Я думаю, що це більше в сенсі "Ця програма не містить проблем за чинним стандартом." Чи хороший це стиль програмування - інша річ.
Курка Сомбреро

21
@ Rakete1111 немає нічого поганого у відповідальному використанні using namespace std. Це може бути, а може і не бути хорошим педагогічним рішенням навчити його нових прогаммерів, але це не морально неправильно як таке.
н. 'займенники' м.

10
Я погоджуюсь, що using namespace stdце погана практика, але я думаю, що це належить до цього питання, тому що привітні світові програми C ++, які ви знайдете в Інтернеті, майже завжди це роблять. Тому важливо бути зрозумілим, що саме це не робить нещасним Turbo C ++. Можливо, замість "З цією програмою немає проблем" скажіть "Ця програма дійсна, згідно з чинним стандартом C ++; її слід компілювати."
zwol

5
@Puppy з того самого жена, всі дзвінки до стандартних функцій відповідають безвідповідально, оскільки ви не знаєте, які нові перевантаження будуть додані. Ви також не знаєте, які мовні функції зникнуть із наступного стандарту або змінять значення. Не всі програми повинні жити десятиліттями або бути переносними для довільних компіляторів.
н. 'займенники' м.

6
"Мало хто пам’ятає Turbo C ++" Я не згоден. Принаймні , один у всій повноті, велика країна активно вчила її сьогодні .
Гонки легкості по орбіті

11

"Turbo C ++" може означати численні компілятори. Задаючи це питання, важливо вказати номер версії.

  • Borland Turbo C ++ до версії 3.1 були чистими компіляторами MS DOS в класичному синьому тлі IDE. Вони були випущені приблизно десь між 1989 по 1992 рік, задовго до того, як C ++ став стандартизованим, що сталося в 1998 році. І тому вони використовували стандартний діалект С ++.

    Найбільш помітно, що вони використовували #include <iostream.h>синтаксис, а не стандарт #include <iostream>, але також не охоплювали багато функцій C ++, таких як простори імен, шаблони тощо. Бібліотека шаблонів STL ще не була частиною стандарту, тому все, що стосується цієї бібліотеки, було досить відрізняється від того, що згодом стало стандартним.

  • Пізніше в 90-х Borland випустив кілька компіляторів DOS / Windows з кращою відповідністю. До версії 5 десь вони все ще боролися з повною відповідністю C ++ 98, хоча ці версії Windows були досить близькими до неї.

  • В кінці 90-х вони відкинули назву "Turbo C ++" на користь Borland C ++ Builder, який був не просто IDE, а повноцінним інструментом RAD на базі Delphi. Ці компілятори повністю відповідали C ++ 98 та пізнішим C ++ 03.

  • Близько 2005 року Borland випустив компілятори як частину своєї лінійки продуктів. Укладачами став "Codegear", який згодом став Embarcadero. Десь тоді, вони випустили безкоштовну версію Borland Builder, яку вони назвали "Turbo C ++". Ця версія повністю відповідала C ++ 03.

  • Нині ці компілятори називаються Embarcadero C ++ Builder. Я вважаю, що зараз вони підтримують до C ++ 11 з деякими C ++ 14. Більше інформації тут.

Потрібно говорити, що як студент ви не повинні використовувати нічого, крім сучасних компіляторів. Використання компіляторів MS DOS з 1991 року при вивченні C ++ у 2018 році - просто безумство. Мало того, що це контрпродуктивно, це прямо шкідливо і зробить вас поганим програмістом на C ++. Якщо ваша школа змушує вас використовувати Turbo C ++ 3.1 або старші, то ваша школа погана, а ваші вчителі сильно некомпетентні. Будь ласка, зв’яжіть цю публікацію з ними та їх директором.


Turbo C ++ все ще поширений в Індії в 2020 році . Все більше і більше - "Це вже 40 років застарілий Turbo C. Індійські коледжі все ще викладають це і відмовляються викладати що-небудь інше. Вони дали мені нульові бали, тому що я використовував std::stringзамість char *іспитів, тому що вони не знають, що C ++ є стандартизованим і char *застаріло. " .
Пітер Мортенсен

@PeterMortensen Так ... це дещо нормально для викладання C90 (кумедно, це все ще краще, ніж Visual Studio з 2020 року), але діалект C ++, який він використовував, був просто хайвером.
Лундін

7

Turbo C ++ - дуже старий компілятор, і він трохи відрізняється від компілятора GNU C ++. Код, яким ви поділилися, буде відмінно працювати з компілятором GNU, але для його запуску з Turbo C ++ вам потрібно внести кілька змін:

1. Змініть ім'я файлу заголовка з iostreamна iostream.h
2. І видаліть рядок "використовуючи std простору імен". Це не потрібно в Turbo C ++. Ось змінений код:

#include <iostream.h>

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

6
Що відповідає у вашій відповіді, що прийнятий - ні?
Rakete1111

7
суть людей, які не встигають прочитати довгі відповіді.
Yougansh Thakur

це не "трохи інакше", але сильно відрізняється від компіляторів C ++
phuclv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.