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

时间:2017-07-01 16:22:30

标签: c++ turbo-c++ c++-faq

我已经开始为我的编程课学习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'

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

3 个答案:

答案 0 :(得分:154)

这个程序没问题。 (除了一些风格问题 - 不推荐using namespace std)。问题出在Turbo C ++上。这是一个非常古老的软件。它实现了C ++的方言,即所谓的 pre-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之前的方言,以过滤掉面向现代语言版本的响应。您可能会得到一堆评论建议您立即停止并切换到现代编译器,并提出您提出的每个问题。
  4. 有许多现代免费(如在beer中,以及在speech中)编译器和IDE可以用来代替Turbo C ++。其中一些包括:

    1. Visual C++ Community Edition是一个IDE和Microsoft的编译器
    2. Code::Blocks是一个轻量级的IDE。在Windows上,它附带了一个有点过时的编译器,但你可以自己安装一个更现代的编译器
    3. Eclipse CDT是一个功能强大的跨平台IDE。它不附带自己的编译器,因此您需要安装单独的编译器。在Windows上,使用例如MinGW
    4. Many more
    5. 此外,还有许多在线编译器,例如http://ideone.comhttps://www.onlinegdb.com/http://coliru.stacked-crooked.com/,以及many more(这些编译器主要用于尝试创意并编写非常小的内容程序)。
    6. Clang/LLVMGCC都是free software编译器,支持最新版本的C ++。
    7. 令人遗憾的是,一些学校/教师似乎甚至在这个时代强迫学生使用Turbo C ++。不幸的是,这不是社区可以解决的问题。如果你发现自己处于这种状况,那就准备好不能得到很多外界的帮助了。

答案 1 :(得分:8)

“ Turbo C ++”可能意味着许多编译器。当问这个问题时,重要的是要包括版本号。

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

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

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

  • 在90年代后期,他们取而代之的名称是“ Turbo C ++”,取而代之的是Borland C ++ Builder,它不仅是一个IDE,而且是一个基于Delphi的完整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.

不用说,作为一个学生,除了现代编译器之外,您不应该使用任何东西。使用1991年的MS DOS编译器在2018年学习C ++简直是疯狂。它不仅适得其反,而且直接有害,并且会使您成为不良的C ++程序员。如果您的学校强迫您使用Turbo C ++ 3.1或更早版本,则您的学校状况不佳,您的老师严重无能。请将此帖子链接到他们及其校长。

答案 2 :(得分:5)

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

1.将标题文件的名称从iostream更改为iostream.h
2。并删除“using namespace std”这一行在Turbo C ++中不需要。 这是修改后的代码:

#include <iostream.h>

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