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

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

提问人:n. m. could be an AI 提问时间:7/2/2017 最后编辑:n. m. could be an AI 更新时间:11/21/2019 访问量:12629

问:

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

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

C Turbo-C C++-常见问题

评论

42赞 n. m. could be an AI 7/2/2017
这旨在作为询问 Turbo C++ 问题的问题的标准重复重定向。其中许多问题往往在评论中只进行简短的解释就被迅速否决,而他们确实可以使用正确的答案。欢迎改进。
8赞 M.M 7/2/2017
建议提及您正在使用的 Turbo C++ 版本。2006 版本应对了这个程序。
6赞 bugwheels94 7/8/2017
“我已经开始为我的编程课学习C++。这是一个谎言。时期。
5赞 n. m. could be an AI 7/8/2017
@bugwheels94 看这个
6赞 eerorika 8/1/2017
@n.m.我不知道bugwheells是不是这个意思,但我认为他们的意思是,如果一个人被教了TurboC++(特别是无法编译这个的旧TurboC++),那么他们就没有学习C++(许多人,包括我,隐含地认为这意味着标准的C++)。

答:

171赞 n. m. could be an AI 7/2/2017 #1

这个程序没有问题。(除了一些风格问题 - 不推荐)。问题出在Turbo C++上。这是一个非常古老的软件。它实现了一种C++方言,即所谓的pre-ANSI C++,到本世纪初已经完全不再使用。C++的第一个ANSI标准于1998年发布,然后是2003年版,2011年版,2014年版,2017年版,现在我们预计2020年版本将正式发布。这些标准修订中的每一个都或多或少地给语言带来了重大变化。using namespace std

对于 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 是 Microsoft 的 IDE 和编译器
  2. Code::Blocks 是一个轻量级的 IDE。在 Windows 上,它附带了一个有点过时的编译器,但您可以自己安装更现代的编译器
  3. Eclipse CDT 是一个功能强大的跨平台 IDE。它没有附带自己的编译器,因此您需要安装单独的编译器。在 Windows 上,例如使用 MinGW。
  4. 还有很多
  5. 此外,还有许多在线编译器,例如 http://ideone.comhttps://www.onlinegdb.com/http://coliru.stacked-crooked.com/,还有更多(这些主要适用于尝试想法和编写非常小的程序)。
  6. Clang/LLVMGCC都是支持最新版本的C++的自由软件编译器。

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

评论

7赞 Hatted Rooster 7/2/2017
@Rakete1111我认为这更像是“按照当前标准,该程序不包含任何问题”。好的编程风格是另一回事。
22赞 n. m. could be an AI 7/2/2017
@Rakete1111负责任地使用 .将其教授给新的教授者可能是一个好的教学决定,也可能不是一个好的教学决定,但它本身在道德上并没有错。using namespace std
10赞 zwol 7/2/2017
我同意这是不好的做法,但我认为它属于这个问题,因为你在网上找到的 C++ hello world 程序几乎总是这样做。因此,重要的是要清楚,这并不是让Turbo C++不高兴的原因。也许与其说“这个程序没有问题”,不如说“根据当前的 C++ 标准,这个程序是有效的;它应该编译。using namespace std
6赞 n. m. could be an AI 7/2/2017
@Puppy出于同样的原因,所有对标准函数的调用都是不负责任的,因为您不知道将添加哪些新的重载。您也不知道哪些语言功能会从下一个标准中消失或改变含义。并非所有程序都需要存在数十年或可移植到任意编译器。
7赞 Lightness Races in Orbit 7/3/2017
“很少有人记得Turbo C++”我不同意。今天,至少有一个完整的大国正在积极地教授它。
6赞 Yougansh Thakur 7/5/2017 #2

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

1. 将头文件的名称从
更改为 2.并删除“使用命名空间标准”行,这在 Turbo C++ 中不是必需的。 以下是修改后的代码:
iostreamiostream.h

#include <iostream.h>

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

评论

7赞 Rakete1111 7/15/2017
你的答案补充了什么,而被接受的答案没有?
9赞 Yougansh Thakur 7/16/2017
对于没有时间阅读长答案的人来说,要点。
0赞 phuclv 8/14/2020
它不是“有点不同”,而是与 C++ 编译器有很大不同
14赞 Lundin 8/21/2018 #3

“Turbo C++”可能意味着许多编译器。提出此问题时,请务必包含版本号。

  • Borland Turbo C++ 3.1 版本之前是经典蓝色背景 IDE 中的纯 MS DOS 编译器。这些大约在 1989 年至 1992 年之间发布,远在 C++ 标准化之前,这发生在 1998 年。所以他们使用了C++的前标准方言。

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

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

  • 在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。更多信息请点击此处。

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

评论

2赞 Peter Mortensen 7/11/2020
Turbo C++ 在 2020 年在印度仍然很常见越来越多的 - “那是 40 年前过时的 Turbo C.印度大学仍然教授它并拒绝教授其他任何东西。他们给我零分,因为我在考试中使用了 std::string 而不是 char *,因为他们不知道 C++ 是标准化的,char * 是不推荐使用的。
0赞 Lundin 7/13/2020
@PeterMortensen是的......它对于教授 C90 来说有点还可以(有趣的是,它仍然比 2020 年的 Visual Studio 更好),但它使用的 C++ 方言只是混乱的。