为啥 main 前面有一个 int ,为啥我的教授会排除它? [复制]

Posted

技术标签:

【中文标题】为啥 main 前面有一个 int ,为啥我的教授会排除它? [复制]【英文标题】: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 年制作的幻灯片而没有更新它们。所以这就回答了 【参考方案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。

【讨论】:

以上是关于为啥 main 前面有一个 int ,为啥我的教授会排除它? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java中为啥要把main方法定义为一个static方法

用 int main(void) 编译失败; main(int argc, char *argv[]) 成功。为啥?

为啥 main(int argc, char* argv[]) 需要两个参数? [复制]

为啥我们需要在 C++ 中使用 `int main` 而不是 `void main`? [复制]

为啥在调用 int main 和在使用继承 C++ 的类中值不同?

为啥 const int main = 195 会导致程序正常工作,但没有 const 会导致分段错误?