为什么一个简单的 "Hello World" 风格的程序不能用 Turbo C++ 编译?

Why doesn't a simple "Hello World"-style program compile with Turbo C++?

我已经开始为我的编程学习 C++ class。我已经下载了这个 "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'

这个非常简单的程序有什么问题?我该如何更正这些错误?

这个程序没有问题。 (除了一些风格问题—— using namespace std 不推荐)。问题出在 Turbo C++ 上。这是一个非常古老的软件。它实现了一种 C++ 方言,即所谓的 pre-ANSI C++,到本世纪初已完全不再使用。第一个 C++ 的 ANSI 标准发布于 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++ 的文献。您会在 Internet 或书籍中找到的近 100% 的 C++ material 并不直接适用于开箱即用的 Turbo C++。有些只需要稍作调整,而其他 material 则完全无法使用。几乎唯一立即可用的帮助来源是内置的 Turbo C++ 帮助。
  3. 很少有人记得 Turbo C++。在论坛上提问时,请始终说明您使用的是 ANSI 之前的方言,以过滤掉针对该语言的现代版本的回复。您可能会收到一堆建议您立即停止并针对您提出的每个问题切换到现代编译器的评论。

有许多现代免费(如 beer, as well as in speech)编译器和 IDE 可以用来代替 Turbo C++。其中一些包括:

  1. Visual C++ Community Edition 是一个 IDE 和 Microsoft
  2. 的编译器
  3. Code::Blocks是轻量级的IDE。在 Windows 上,它附带了一个有点过时的编译器,但您可以自己安装一个更现代的编译器
  4. Eclipse CDT is a powerful cross-platform IDE. It doesn't ship with its own compiler so you need to install a separate compiler. On Windows, use e.g. MinGW.
  5. Many more
  6. 此外,还有很多在线编译器,例如http://ideone.com, https://www.onlinegdb.com/ and http://coliru.stacked-crooked.com/, plus many more(这些主要用于尝试想法和编写非常小的程序)。
  7. 两个 Clang/LLVM and GCC are free software 编译器都支持最新版本的 C++。

遗憾的是,有些 schools/teachers 即使在这个时代,似乎也强迫学生使用 Turbo C++。不幸的是,这不是这个社区可以解决的问题。如果您发现自己处于这种情况,请做好无法获得太多外界帮助的准备。

Turbo C++ 是一个非常古老的编译器,它与 GNU C++ 编译器有点不同。您共享的代码将与 GNU 编译器完美配合,但要 运行 它与 Turbo C++ 配合使用,您需要进行一些更改:

1.将头文件的名称从iostream更改为iostream.h
2。并删除行 "using namespace std" It is not required in Turbo C++。 这是修改后的代码:

#include <iostream.h>

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

“Turbo C++”可能意味着众多的编译器。问这个问题的时候,一定要包括版本号。

  • 直到 3.1 版的 Borland Turbo C++ 都是经典蓝色背景下的纯 MS DOS 编译器 IDE。这些大约在 1989 年到 1992 年之间的某个时间发布,远早于 C++ 成为标准化的时间,标准化发生在 1998 年。因此他们使用了 C++ 的准标准方言。

    最值得注意的是,他们使用了 #include <iostream.h> 语法而不是标准的 #include <iostream>,但也没有涵盖很多 C++ 功能,例如名称空间、模板等。模板库 STL 是还不是标准的一部分,所以与该库相关的所有内容都与后来成为标准的完全不同。

  • 90 年代后期,Borland 发布了几个 DOS/Windows 一致性更好的编译器。尽管这些 Windows 版本相当接近它,但在某处他们仍然努力完全符合 C++98 的版本 5。

  • 在 90 年代后期,他们放弃了名称“Turbo C++”,取而代之的是 Borland C++ Builder,它不仅仅是一个 IDE,而是一个基于 [=43 的完整 RAD 工具=].这些编译器完全符合 C++98 和后来的 C++03。

  • 2005 年左右,Borland 放弃了编译器作为其产品线的一部分。编译器成为“Codegear”,后来成为 Embarcadero。大约在那时,他们发布了一个免费版本的 Borland Builder,他们将其命名为“Turbo C++”。此版本完全符合 C++03。

  • 现在这些编译器被称为 Embarcadero C++ Builder。我相信他们目前支持 C++11 和一些 C++14。 More info here.

不用说,作为一名学生,除了现代编译器,你不应该使用任何东西。在 2018 年学习 C++ 时使用 1991 年的 MS DOS 编译器简直是疯狂。它不仅适得其反,而且直接有害,会让你成为一个糟糕的 C++ 程序员。如果你的学校强迫你使用 Turbo C++ 3.1 或更早版本,那么你的学校很糟糕,你的老师也很不称职。请 link 这个 post 给他们和他们的校长。