对 LZ对never715的追问 的回复:
main函数声明为void类型没有问题,这种情况通常用于不需要操作系统关心程序的返回结果的情况下。此时,程序中使用exit(0)这样的代码,编译器通常会给出错误或警告,提示main函数是无返回值类型。
如果一个程序需要告诉操作系统它的执行结果是正常还是异常,那么main函数应该声明为int类型,同时在代码中任意位置都可以调用exit函数,参数为一个整数数值,如exit(0)或exit(1)等等,通常exit(0)表示程序正常结束,而其他值表示异常结束。但也不是那么绝对,主要还是要看程序的调用者如何理解并使用这个返回值。
main函数的返回值也可以用return来返回,当然仅限定在main函数体内使用,可以在main函数体内任意位置使用return 0、return 1这样,就如同函数内部一样。
如果LZ想详细了解程序返回值的相关知识和用途,建议了解一下UNIX系统的shell编程,DOS编程也可以,但资料可能会比较少。
现在WINDOWS系统的编程基本上都是图形化、窗口式编程,程序的返回值不再像UNIX SHELL和MSDOS中那么有用,所以WINDOWS下的编程几乎都不再考虑返回值这个问题了。
return 是退出函数模块并返回值给调用该函数的操作数,所以函数前要有返回类型,如果是用在main函数中的话,main函数返回值不能声明成void,那么此时的return与exit调用都是使程序结束并返回到操作系统。
exit后面跟个整形数(一般用的宏),通常用0,表示退出程序,然后跳到操作系统。他不受函数返回值限制
注:main函数是操作系统调用的
abort()函数通过发出一个SIGABRT信号终止程序的执行。
abort()函数不会清空缓冲区,也没有调用之前用atexit()函数注册的清理函数。
exit()函数结束程序,返回一个值给操作系统,告知程序的最后状态。在调用exit()函数之后,控制权会移交给操作系统。
在结束程序之前,exit()函数会调用之前使用atexit()注册过的所有函数,按照LIFO次序调用,关闭所有打开的文件,删除tmpfile()函数建立的所有临时文件
#include
#include
int test_exit()
{
printf("do sth&& sub fun exit\n");
//exit(0);
//return 0;
//exit(4);
return (4);
}
int main()
{
int a;
a=test_exit();
printf("a=%d\n",a);
printf("main exit\n");
return 0;
}
把这个程序编译 运行 就知道区别在哪里了。