#include<stdio.h>
int main(void)
{
int i = 99;
printf(“%d”,i);
return 0;
}
就上面这个函数 来理解返回值0。我想问一下。我是不是可以这样理解。
主函数main 在执行中 流程是 执行i 给i赋值 99 然后输出 i 然后 返回值0 然后0 就交给操作系统 ,操作系统就去执行这个输出99在屏幕上,
那么如果 在主函数 在执行 中 给i赋值99的时候 出错(这个出错是假设), 那么程序就无法继续往下操作,那么这个时候 函数是否就会自动返回-1给操作系统。然后操作系统来终止这个函数?
这里的返回值 我理解的意思 在主函数中,无论你如何对函数内部进行处理,但是必须要经行到return 0这一步。不然 就代表这个函数是失败的。?
另外如果 我为retrun -1,一般的操作系统是否就不会对这个函数进行处理呢?
不好意思 ,你的解答反而弄得我有点糊涂了。因为之前在我查询过是 人家说的 主函数int main(void)中的return 0 中作用是交给操作系统的。你刚说的例如我不太理解是否可以说详细一点,另外 如果这个return不是按照我所说的操作的话 那么这个返回值的意义 好像就没有什么用处了吗?
不好意思 ,你的解答反而弄得我有点糊涂了。因为之前在我查询过是 人家说的 主函数int main(void)中的return 0 中作用是交给操作系统的。你刚说的例如我不太理解是否可以说详细一点,另外 如果这个return不是按照我所说的操作的话 那么这个返回值的意义 好像就没有什么用处了吗?
追答是交出去给操作系统,但并不是操作系统自己去检查,而是还是由使用电脑的人自己去检查。
例如windows上的一个A程序,需要dotnet框架支持,因此,安装之前检查是否安装了dotnet框架,没有则调用安装,这个时候,就要检查dotnet框架安装程序是否执行正常。而dotnet安装程序成功返回0,失败返回其他各种值,表达因为什么原因失败。而A的安装程序只有检查到dotnet安装程序返回0表示成功,才继续执行安装,否则则提示dotnet安装失败,自己退出。
而如果你只是自己直接调用dotnet安装程序,则这个返回值对你来说没有意义了,你只需要操作安装程序就是了。而如果简单点的脚本例子,则dos/WINDOWS下的bat批处理,linux之类的脚本很多这些例子。例如:
@ECHO OFFXCOPY 成功返回0,失败返回1。BAT批处理检查返回值,提示文件复制成功还是失败。
再例如 linux 下:
rm testfile && echo "文件删除" || echo "文件删除失败"根据 rm 的返回,提示文件删除成功还是失败。
首先main函数返回多少是不会影响输出的,因为当执行到return语句的时候,printf语句已经执行过了,没有后悔药的,因为main函数也是一个普通的函数。一个程序的执行大致过程如下:
int main(int argc, char* argv[])这个隐含的start函数先做一些准备工作,然后执行main函数,然后做一些清理工作,最后调用exit结束执行。
这个返回值有什么用? 一般来说进程有父子关系一说,子进程的返回值(就是exit的参数)可以被父进程捕获,父进程可以根据约定的返回来判断子进程的执行状态,然后做其他事情。
你在shell或cmd下执行的程序都是shell或cmd的子进程,执行完命令后可以根据返回值来判断这个命令是否执行成功,便于自动化处理。