Почему простая программа Hello World не скомпилирована с Turbo С++?

Я начал изучать С++ для своего класса программирования. Я загрузил эту программу "Hello World":

#include <iostream>
using namespace std;

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

но Turbo С++ жалуется:

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'

Что случилось с этой очень простой программой? Как я могу исправить эти ошибки?

Ответ 1

Там нет проблем с этой программой. (За исключением, вероятно, некоторых стилистических вопросов - using namespace std не рекомендуется). Проблема с Турбо C++. Это очень старая часть программного обеспечения. Он реализует диалект 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++ does not 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++. Задавая вопросы на форумах, всегда указывайте, что вы используете pre-ANSI диалект, чтобы отфильтровать ответы, ориентированные на современную версию языка. Вы, вероятно, получите кучу комментариев, предлагающих вам немедленно остановиться и переключаться на современный компилятор с каждым вопросом, который вы задаете.

Есть много современных бесплатных (как в beer, а также в speech) компиляторов и IDE, которые вы можете использовать вместо Turbo C++. Некоторые из них включают в себя:

  1. Visual C++ Community Edition - это интегрированная среда разработки и компилятор от Microsoft
  2. Code :: Blocks - это облегченная среда разработки. В 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++ даже в наши дни. К сожалению, это не то, что может исправить это сообщество. Если вы окажетесь в такой ситуации, приготовьтесь к тому, что вы не сможете получить много посторонней помощи.

Ответ 2

"Турбо C++" может означать множество компиляторов. Задавая этот вопрос, важно указать номер версии.

  • Borland Turbo C++ до версии 3.1 были чисто MS DOS-компиляторами в классической IDE на синем фоне. Они были выпущены где-то между 1989 и 1992 годами, задолго до того, как C++ стал стандартизированным, что произошло в 1998 году. И поэтому они использовали предстандартный диалект C++.

    В частности, они использовали синтаксис #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 или старше, то ваша школа плохая, а ваши учителя крайне некомпетентны. Пожалуйста, свяжите этот пост с ними и их директором.

Ответ 3

Turbo С++ - очень старый компилятор, и он немного отличается от компилятора GNU С++. Код, который вы поделили, отлично работает с компилятором GNU, но для запуска его с Turbo С++ вам нужно внести несколько изменений:

1. Измените имя файла заголовка с iostream на iostream.h
2. И удалите строку "using namespace std". Это не требуется в Turbo С++. Вот модифицированный код:

#include <iostream.h>

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