【问题标题】:Void in main and keeping Dos program from dying [duplicate]主程序无效并防止Dos程序死亡[重复]
【发布时间】:2011-03-01 21:21:50
【问题描述】:

可能重复:
Difference between void main and int main?

好的,所以我使用的是流血编译器,首先我应该注意的是我使用的是 2001 版 C++ 为绝对的初学者,自 2001 年以来 C++ 是否有任何变化会影响本书的有效性?我问是因为我知道 php 有 php5,现在有 php6,但我还没有看到任何 C++03。

现在出于我问的原因,在它使用的这段代码中,

void main (void)

为什么我希望一个论点无效?这是做什么的。

但是当我在我的编译器中运行void main (void) 时,它说main 之前必须有一个“int”。所以我不能有 "void" main (void);

此外,一旦代码运行完毕,只要没有“cin”,程序就会关闭。 这是正常行为吗,除了在我的程序结束时制作一个 cin 之外,还有更好的方法来阻止它吗?

【问题讨论】:

标签: c++ void


【解决方案1】:

烧掉那本书。 void main 不仅不符合 any C++ 标准(现代或旧的),而且使用 (void) 而不是 () 声明无参数函数是 C++ 中不鼓励使用的 C 习惯用法.从这个样本中,我不禁想到这本书可能包含的其他恐怖内容。

控制台窗口关闭的问题与程序的内容完全无关。 Windows 有一种行为,如果您直接启动控制台程序,它会在程序结束时自动关闭控制台窗口。为避免这种情况,请自己打开一个控制台窗口,然后在其中运行您的程序。只要您愿意,控制台窗口就会一直保持打开状态。 (并且避免使用不幸流行的做法,即在程序末尾添加额外的虚拟输入或“暂停”调用以保持窗口打开。您不应该向您的程序添加代码以补偿您碰巧启动它的特定方式;只需以正确的方式启动它,不要理会糟糕的代码。)

【讨论】:

  • 到目前为止,代码符合要求,当然,据我了解,OOP 本身就是迄今为止塞进一章的另一整本书。通常只是想知道 C++ 自 2001 年以来是否进行了任何更改,这会使本书的信息过时。考虑到作者从未使用过会话,PHP% 版本是个笑话。但是书还是有好处的。
  • 我想说的是,自 2001 年以来是否对 C++ 进行了更改(有一些更改)并不重要,因为从您展示的示例来看,这本书并不准确即使相对于 1998 年的 C++ 标准。这显然使它成为一本非常不适合学习的书。
【解决方案2】:

自 2001 年以来发生了对 C++编译器 的更改,总体而言,在 C++ 接受它之前,它们对 C++ 必须符合标准的程度更加挑剔。例如,gcc 从 2.95 左右一直到 4.4.2。早期的编译器可能让您使用这种形式的 main 滑动,因为它们会使用一些不适合 C++ 的旧 C-isms,但在这种情况下改变的不是语言(至少,就标准而言)。

话虽如此:是的,C++ 已经发生了变化,并且正在发生变化,尽管还没有达到官方标准级别。不同的编译器在不同程度上支持这些更改。我认为您不太可能受到它们的影响,但您可能无论如何都想了解它们。见:

至于如何结束你的程序。我推荐一个简单的“return 0;”在main 中您要退出的点 - 如果您想退出并出现错误,请使用 0 以外的退出代码。不过,您可以省略返回,许多示例都是这样做的,尽管我个人认为这是不好的风格。

我了解到您正在使用 cin 在应用程序退出之前暂停它。这对于 C++ 应用程序通常不是必需的,它只是方便以您的方式运行应用程序。举例来说没问题,但你肯定希望在实际应用中避免这种情况。

【讨论】:

  • 它的工作原理是,如果我输入 cin,那么程序会在完成程序并关闭之前暂停等待我的响应。所以我在我的程序结束时贴了一个 cin 让它暂停,让我回顾一下结果。否则程序关闭得太快,我什至无法阅读一行。谢谢回复。从那以后赚了很多。所以我应该对 2001 年的书没问题?
  • @Timothy 您是否阅读了我的回答的第二部分,其中解决了您的程序为何关闭以及如何防止它的问题?使用 2001 年的书并没有错,但为了您自己,请使用至少与出版时的标准准确的 不同 2001 年的书。
  • main()之外留下return语句是合法的;它将在最后隐式返回零。但是你当然必须声明一个int 返回类型,如果书上说不是这样,那就错了。
  • @TimothyTech 如果这本书是可读的并且适合你,我会偏离我同事的一般意见,说继续使用它 - 这本书写成这样是错误的方式,但我认为这是一个相当小的问题。像任何一本书一样,批判性地阅读,如果有些东西没有意义或不起作用,那就问吧。请记住,还有很多其他的 C++ 书籍。 :-)
  • 是的,先生,但它是我找到的最好的免费副本。你知道你有任何更好的免费副本,请告诉我。我在第 5 章,这是我遇到的唯一问题。我的另一本书使用的是“std::cout
猜你喜欢
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 2018-02-22
  • 1970-01-01
相关资源
最近更新 更多