【问题标题】:Why does main have an int in front of it and why could my Professor be excluding it? [duplicate]为什么 main 前面有一个 int ,为什么我的教授会排除它? [复制]
【发布时间】:2013-04-14 17:34:03
【问题描述】:

所以在我教授的幻灯片中,他只是简单地举了这样的例子:

main()
{...
}

对吗?但是当我把它放在visual studio中时它会出错,当我把int放在main前面时它就可以工作。 为什么我的教授不把 int 放在 main 前面? main 可以是任何其他类型的变量吗? 我也看到很多 int main(void)。为什么这是必要的?是否可以将其他任何内容作为参数放入?

【问题讨论】:

  • 你的教授错了。 (或正在简化代码以适应幻灯片)
  • 因为你的教授正在编写代码,就好像它是 1988 年一样。即便如此,这也是一个糟糕的主意。至于您的问题,您使用的是 C++ 编译器,而不是 C。VS 仅支持 C89,VC++ 拒绝该代码,因为 C++ 不支持隐式 int。
  • 你的教授不称职;你应该举报他或她。
  • 这是 C 中的有效声明,而不是 C++。
  • 我意识到他重复使用了他在 2004 年制作的幻灯片而没有更新它们。所以这就回答了

标签: c++ c visual-studio-2010 visual-c++


【解决方案1】:

main 返回int。在旧版本的 C 中,您可以省略 int,编译器会假装您说的是 int。在 C++ 中,如果 'main' 没有显式返回值,它会神奇地返回 0。您可以从 main 返回三个值:0、EXIT_SUCCESS 和 EXIT_FAILURE。 0 相当于 EXIT_SUCCESS。这两个命名值在 <stdlib.h> 中定义,如果您使用 C++ 编码,则在 <cstdlib> 中。

void 是 C 风格的声明,函数不接受任何参数。在 C++ 中你不需要它;声明中没有参数的函数不接受任何参数。

不过,一般来说,main 有两个参数:

int main(int argc, char *argv[])

这些是命令行参数。 argc 是参数的数量,argv 是指向包含参数的 C 样式字符串的指针数组。第一个字符串 (argv[0]) 是程序的名称。

【讨论】:

    【解决方案2】:

    因为您使用的是:C++ 或 C99 或 C11。

    C89 有一个隐含的int 规则,它使main() 等同于int main()。这在 C++ 中不存在,并且自 C99 以来不再存在。

    正如您提到的,您使用的是 Visual Studio,它不支持 C99 和 C11,您可能正在使用 C++ 编译器而不是 C 编译器来编译程序。

    【讨论】:

    • 他在用VC++(VC是C89)+1
    【解决方案3】:

    main 函数的标准形式传统上是

    int main(int argc, char **argv)
    

    前面的int表示main函数返回一个int,也就是main的退出码。操作系统argcargv 传入的边界与命令行参数有关。 argc 是一个int,表示传入程序的参数数量,包括程序的名称。并且argv 指向各个参数。您可以使用argv[index] 访问它们。有几个方便的库用于解析参数,例如 getopt。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 2015-05-17
      • 2010-09-06
      • 2013-11-04
      • 2019-10-28
      • 1970-01-01
      • 2015-11-07
      相关资源
      最近更新 更多