这段代码可以编译吗?

时间:2011-03-18 22:33:10

标签: c++

  

可能重复:
  C++ void return type of main()
  What is the proper declaration of main?

简单的问题,真的。

我的朋友和我正在仔细阅读下一学期我们应该听到的教授的Powerpoint幻灯片。这将是一门Java课程。出于某种原因,他有这个C ++代码片段

#include <iostream.h>
main ()
{ cout << "Hello, World\n"; }

我已经告诉我的朋友,“不,这不适用于任何现代C ++编译器。”

我现在的问题是,这可以编译吗?

4 个答案:

答案 0 :(得分:21)

可以,当然。

例如,考虑<iostream.h>是否是包含以下内容的标题:

#include <iostream>
using std::cout;
#define main int main

答案 1 :(得分:7)

这不是标准的C ++。对于一段简短的代码来说问题列表很长......可能是因为它来自很久以前和一个旧的不合格的编译器。

  • 包含标题的正确名称为#include <iostream>,在ANSI标准化期间删除了.h

  • 必须在C ++中明确声明类型。你不能在没有返回类型的情况下声明一个函数,并获得一个默认的int(即C,而不是C ++)。

  • main的标准签名是:int main()int main( int argc, char** )(实现可以提供额外的参数,但返回类型必须是int

  • coutstd命名空间内定义,除非您添加using,否则无法无限制地使用。

适当的C ++中的等效代码将是

#include <iostream>
int main() {
   std::cout << "Hello world\n";
}

答案 2 :(得分:2)

这将编译,但任何体面的编译器都应该发出警告。由于您使用的是#include <iostream.h>,因此编译器会假定这是旧代码并以向后兼容模式编译它。在我的机器上,gcc说:

In file included from /usr/include/c++/4.2.1/backward/iostream.h:31,
                 from oldcpp.cpp:1:
/usr/include/c++/4.2.1/backward/backward_warning.h:32:2: warning:
#warning This file includes at least one deprecated or antiquated header. 
Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ 
standard. Examples include substituting the <X> header for the <X.h> header for C++ 
includes, or <iostream> instead of the deprecated header <iostream.h>. 
To disable this warning use -Wno-deprecated.

但它仍然可以很好地编译。在运行代码时,我得到了预期的结果:即:

Hello, World

答案 3 :(得分:1)

这甚至值得质问吗?为什么要编写角落案例C / C ++?遵守标准有什么问题? main()是程序的入口点,操作系统需要程序返回代码。现在有人认为void main()是否可以接受,但为什么要为它辩护呢?只需使用int main()并成为一个写好代码的快乐老兄:

#include <iostream>

int main(int argc, char* argv[]) {
    std::cout << "Hello World!\n";
    return 0;
}

我用这个开始每个程序(没有HW!然后),从来没有遇到任何问题。