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

n. *_* m. 100 c++ c++-faq turbo-c++

我已经开始为我的编程课学习C++了.我已经下载了这个"Hello World"程序:

#include <iostream>
using namespace std;

int main() 
{
    cout << "Hello, World!";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是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'
Run Code Online (Sandbox Code Playgroud)

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

n. *_* m. 157

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

对于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;
}
Run Code Online (Sandbox Code Playgroud)

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

遗憾的是,一些学校/教师似乎迫使学生即使在这个时代也使用Turbo C++.不幸的是,这不是社区可以解决的问题.如果你发现自己处于这种状况,那么就应该做好准备,避免得到更多的外界帮助.

  • @Rakete1111*使用`using namespace std`没有任何问题.向新的程序员教授它可能是也可能不是一个好的教学决策,但这本身并不是道德错误. (21认同)
  • 我同意`using namespace std`是不好的做法,但我认为它属于这个问题,因为你在网上找到的C++ hello world程序几乎总是这样做.因此,重要的是要明确这不是让Turbo C++不高兴的原因.也许代替"这个程序没有问题"说"这个程序是有效的,根据_current_ C++标准;它应该编译." (10认同)
  • @Rakete1111我认为它更符合"这个程序对现行标准没有任何问题." 是否良好的编程风格是另一回事. (7认同)
  • _"很少有人记得Turbo C++"_我不同意.至少有一个整个大国正在积极地被教育它_today_. (6认同)
  • @Puppy出于同样的原因,所有对标准函数的调用都是不负责任的,因为你不知道会添加什么新的重载.您也不知道哪种语言功能会从下一个标准中消失或改变含义.并非所有程序都需要存活数十年或者可以移植到任意编译器. (5认同)
  • 这就解释了为什么我不能让Turbo C++在2000年作为一个孩子工作.关闭它是件好事! (2认同)
  • 这个问题引起了我的注意,因为作为 1999-2000 年的一名学生,我参加了两门 C++ 课程,这些课程使用 Turbo 教授预标准 C++。我在课堂上做得很好,并认为我对事情很了解。在进入现实世界并看到真正的代码后,我决定我根本不知道 C++,但至少我可以把它变成“我知道 C” :) (2认同)
  • 在Turbo C++ 4.x附近,发布的程序编译得很好.即使它是在C++ 98之前发布的.我添加了一篇解释"Turbo C++"历史的帖子,因为有很多不同的版本. (2认同)

Lun*_*din 11

"Turbo C++"可能意味着众多编译器.在提出这个问题时,重要的是要包含版本号.

  • Borland Turbo C++高达3.1版本是经典蓝色背景IDE中的纯MS DOS编译器.这些大约在1989年到1992年之间发布,早在C++变得标准化之前很久就发生在1998年.因此他们使用了预先标准的C++方言.

    最值得注意的是他们使用的是#include <iostream.h>语法而不是标准#include <iostream>,但也没有涵盖大量的C++特性,如名称空间,模板等.模板库STL还不是标准的一部分,所以与该库相关的一切都很漂亮与后来成为标准的不同.

  • 在90年代后期,Borland发布了几个具有更好一致性的DOS/Windows编译器.虽然这些Windows版本与它非常接近,但在某个地方,它们仍然在努力完全符合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.更多信息在这里.

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

  • Turbo C++ [2020 年在印度仍然很常见](https://www.youtube.com/watch?v=Bbc4RzTTLec&amp;lc=Ugxcr1WrudpsLWHGeKh4AaABAg&amp;t=1m40s)。[更多](https://www.youtube.com/watch?v=Bbc4RzTTLec&amp;lc=UgzdofiQp_1MkaYThgV4AaABAg) 和 [更多](https://www.youtube.com/watch?v=Bbc4RzTTLec&amp;lc=UgzDUI_p2UmcsPT_FRF4AaABAg) - *“即 40已经过时的 Turbo C 了很多年了。印度大学仍然教它,拒绝教其他任何东西。他们给了我零分,因为我在考试中使用了 `std::string` 而不是 `char *`,因为他们不知道 C++已标准化,`char *` 已弃用。"*。 (2认同)

You*_*kur 6

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

1.将头文件的名称更改iostreamiostream.h
2.并删除行"using namespace std"它不是在Turbo C++中需要.这是修改后的代码:

#include <iostream.h>

int main() 
{
  cout << "Hello, World!";
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 对没有时间阅读长答案的人的要点. (5认同)
  • 你的答案补充说接受的答案是什么? (4认同)