目录
编程语言一定需要main函数吗?
函数入口一定是main吗?
main函数
脚本语言的入口
main真的是入口吗?
main函数参数
main方法可以是private私有?
主类需要的public吗?
为什么经常看到main函数最后return 0?
main函数一定返回int吗?
exit(n)并不完全等价main函数return (n)?
编程语言一定需要main函数吗?
不一定。
解释型或脚本语言倾向于从前到后执行,不一定需要main函数。如果编译为库,不需要入口函数。
具体而言:
Shell/Batch批处理/JavaScript默认从前往后执行。Python如果没有__main__, 也是从前到后执行。C/ObjC/C++/Java/C#/Rust/Go/仓颉都需要有main函数,注意C#是大写开头的Main.Swift的设计哲学是简约,不需要用main函数,如果代码没有main函数,编译器会默认生成一个main函数。 func main() { // 你的程序代码 } main()VB6 GUI程序没有显式的main函数,事件驱动依赖形如From_Load事件函数应需执行。但VB.NET控制台应用程序需要显式的Main函数为入口。
函数入口一定是main吗?
不一定,只是一般给程序员的说法是入口是main. 从进程运行的角度,操作系统加载器会调用对应程序开始运行的准备库,最终调用用户层代码main函数作为入口。
VC++可设定#pragma comment(linker,"/entry:new_main_entry")指定入口点。C# csc提供 /main:
main函数
基本每种编译型语言都有一个主入口,又被称为main函数。不同语言main名称可能有不同,C#用Main函数。另外,有的语言编译器也可以指定入口位置,完全不用遵循main.
脚本语言的入口
脚本语言被简单解释执行,一般顺序执行,没有入口一说。Python特别提供__main__指定入口。
main真的是入口吗?
从操作系统和库的角度,main函数并不是程序或进程的第一入口,算是回调到程序员源代码的入口。程序员看到main,代表执行到写的代码的入口,其实操作系统和库早已为程序运行准备了,它们的入口隐藏在main上级。
main函数参数
C# 参数可以是void或者string数组。 Main() 或者 Main(string[] args)
特别注意:args不包含程序名,和C/C++不同。即当以1和2作为参数运行程序myapp 1 2,args是1和2,不包含myapp.Environment.CommandLine是包含程序名的完整参数信息。
main方法可以是private私有?
一般意义而言,main方法是公开开放的,public类型是最常见。这对于Java而言没有问题,它的main函数必须是public.
C#降低了对Main方法的约束,不一定是public,private/protected同样可以通过编译。根源在于CLR是以中间语言IL .entrypoint标记入口,对Main方法限制符毫不关心,看来CLR把Main方法当成自己人了。C++语法不允许入口函数main函数不能用private或者public修饰。
主类需要的public吗?
Java主类(包含main方法的类)一定需要的public修饰。
为什么经常看到main函数最后return 0?
为了配合shell获取返回值,一般而言shell认为程序返回值为0代表正确,非0代表失败。
main函数一定返回int吗?
不一定。
C/ObjC用void main()也是可以的。但是不建议,因为这样忽略了返回值,如果程序被脚本调用,脚本无法知道程序返回的真实值。
GCC编译C/ObjC允许main返回void,clang只允许返回int. C++ main函数一定是int, 对于非int类型,G++/Clang编译器会报错:'main' must return 'int'仓颉编程语言main函数可以返回Int64, 也可以没有返回值。C# Main函数可以返回void,也可以是int.Java要求main函数一定返回void.Go main函数一定没有返回值,如果增加返回值会报错: func main must have no arguments and no return valuesRust main函数也默认返回空,不能用其他类型。Swift允许main函数返回空,也可以返回Int.VB.NET控制台应用程序Main函数可以返回空,也可以返回Integer,但不能是其他类型。Python不需要显式返回一个数值,比如return或者exit函数。
exit(n)并不完全等价main函数return (n)?
如果main函数里面有atexit注册的函数或者设定了一些需要清理的API,比如setvbuf. 这种情况下,exit (n)是最好的做法,直接return (n)可能导致资源未释放。
若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。