提问人:n. m. could be an AI 提问时间:7/2/2017 最后编辑:n. m. could be an AI 更新时间:11/21/2019 访问量:12629
为什么一个简单的“Hello World”风格的程序不能用 Turbo C++ 编译?
Why doesn't a simple "Hello World"-style program compile with Turbo C++?
问:
我已经开始为我的编程课学习 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'
这个非常简单的程序有什么问题?如何更正这些错误?
答:
这个程序没有问题。(除了一些风格问题 - 不推荐)。问题出在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++ 学习编程,但我强烈建议在可能的情况下避免这种情况,因为存在以下问题:
- 您将学习一种与行业中使用的流行语言有些相似的语言,但仍然非常不同,没有充分的理由。如果你打算为真正的软件开发编写 C++,你将不得不重新学习很多东西。立即学习现代 C++ 要容易得多。
- 没有关于Turbo C++的现有文献。您在互联网或书籍中找到的几乎 100% 的 C++ 材料并不直接适用于开箱即用的 Turbo C++。有些只需要稍作调整,而其他材料则完全无法使用。几乎您立即获得的唯一帮助来源是内置的 Turbo C++ 帮助。
- 很少有人记得Turbo C++。在论坛上提问时,请始终指定您使用的是 ANSI 之前的方言,以便过滤掉面向该语言的现代版本的回复。你可能会收到一堆评论,建议你立即停下来,并在你提出的每个问题时切换到现代编译器。
有许多现代免费(如啤酒和语音)编译器和IDE可以用来代替Turbo C++。其中一些包括:
- Visual C++ Community Edition 是 Microsoft 的 IDE 和编译器
- Code::Blocks 是一个轻量级的 IDE。在 Windows 上,它附带了一个有点过时的编译器,但您可以自己安装更现代的编译器
- Eclipse CDT 是一个功能强大的跨平台 IDE。它没有附带自己的编译器,因此您需要安装单独的编译器。在 Windows 上,例如使用 MinGW。
- 还有很多
- 此外,还有许多在线编译器,例如 http://ideone.com、https://www.onlinegdb.com/ 和 http://coliru.stacked-crooked.com/,还有更多(这些主要适用于尝试想法和编写非常小的程序)。
- Clang/LLVM和GCC都是支持最新版本的C++的自由软件编译器。
遗憾的是,即使在这个时代,一些学校/老师似乎也强迫学生使用Turbo C++。不幸的是,这不是这个社区可以解决的问题。如果您发现自己处于这种情况,请准备好无法获得太多外部帮助。
评论
using namespace std
using namespace std
Turbo C++ 是一个非常古老的编译器,它与 GNU C++ 编译器略有不同。您共享的代码将与 GNU 编译器完美配合,但要使用 Turbo C++ 运行它,您需要进行一些更改:
1. 将头文件的名称从
更改为 2.并删除“使用命名空间标准”行,这在 Turbo C++ 中不是必需的。
以下是修改后的代码:iostream
iostream.h
#include <iostream.h>
int main()
{
cout << "Hello, World!";
return 0;
}
评论
“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或更早版本,那么你的学校很糟糕,你的老师严重不称职。请将这篇文章链接到他们和他们的校长。
评论
了 std::string
而不是 char *,因为他们不知道 C++ 是标准化的,char *
是不推荐使用的。
上一个:什么是“跨度”,何时应该使用?
评论