main函数标准写法
int main(void)
int main(int argc, char **argv)
int main(int argc, char *argv[])
main函数为什么需要返回值?
1、函数在设计的时候设计了参数和返回值(参数是函数的输入,返回值是函数的输出)
2、函数通过返回值对外输出数据。
3、函数是被另一个函数所调用,返回值作为函数式的值返回给调用这个函数的地方。
谁调用main函数?
1、main函数式特殊的符号。 因为C语言规定了main函数是整个程序的入口。其他函数只有直接或间接被main函数所调用才能被执行,如果没有被main直接/间接调用则这个函数在整个程序中没有用。
2、main函数代表当前整个程序。 main函数的开始意味着整个程序开始执行,main函数的结束返回意味着整个程序的结束。
linux下一个新程序执行的本质
程序有哪几种被调用执行的方法?
1、linux中在命令行中去./XX执行一个可执行程序
2、可以通过shell脚本来调用执行一个程序
3、可以在程序中调用执行一个程序(fork exec)
这些方法从本质上看是相同的。
(1)linux中一个新程序的执行本质上是一个进程的创建、加载、运行、消亡。
(2)linux中执行一个程序其实就是创建一个新进程然后把这个程序放到这个进程中运行执行直到结束
(3)在linux中进程都是被它的父进程fork出来的。
现在可以回答下上一个问题,是main函数返回值是给谁?
答: main函数返回给调用这个函数的父进程。
父进程要这个返回值干啥?
答: 父进程调用子进程来执行一个任务,然后子进程执行后完成后通过main函数的返回值返回给父进程一个答复。这个答复一般是表示子进程的任务执行结果是成功还是失败。
谁给main函数传参?
调用main函数所在的程序的父进程给main函数传参,并且接收main的返回值
为什么要给main函数传参?
1、main函数不传参是可以的,也就是说父进程调用子进程并且给子程序传参不是必须的。
2、main函数设计成传参是为了让程序有一种灵动性。可以在不重复修改源代码编译的情况下,执行程序通过传参来控制程序输出结果 。
main传参实现过程
表面上:给main传参时怎么实现的?
1、给main函数传参通过argc和argv这两个C语言规定的参数来实现的
2、argc是int类型,表示运行程序的时候给main函数传递几个参数
argv是一个字符串数组,这个数组用来存储多个字符串,每个字符串就是我们给main函数传的一个参数。(argv[0] 就是给main函数的第一个参数(就是执行的./XXX )… )
本质上:给main传参时怎么实现的?
1、程序调用各种方法其本质就是父进程fork一个子进程,然后子进程和一个程序绑定起来去执行(exec函数),在exec的时候可以给它传参。
2、程序调用时可以被传参是操作系统层面的支持完成的。