为啥 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
的退出码。操作系统argc
和argv
传入的边界与命令行参数有关。 argc
是一个int
,表示传入程序的参数数量,包括程序的名称。并且argv
指向各个参数。您可以使用argv[index]
访问它们。有几个方便的库用于解析参数,例如 getopt。
【讨论】:
以上是关于为啥 main 前面有一个 int ,为啥我的教授会排除它? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
用 int main(void) 编译失败; main(int argc, char *argv[]) 成功。为啥?
为啥 main(int argc, char* argv[]) 需要两个参数? [复制]
为啥我们需要在 C++ 中使用 `int main` 而不是 `void main`? [复制]