int main()和void main()的区别
make && make install 的例子很形象。不过从进程和子进程的关系角度来理解可能更好。main函数是程序的入口也是出口,所有的进程都可以理解为root进程的子进程。main函数的返回值就提供给了创建这个进程的父进程了解进程运行情况的可能。
http://c.biancheng.net/cpp/html/57.html
1.函数的值只能通过return语句返回主调函数。return语句的一般形式为:
return 表达式;
或者为:
return (表达式);
该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个return语句,但每次调用只能有一个return 语句被执行,因此只能返回一个函数值。
2.函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。
3.如函数值为整型,在函数定义时可以省去类型说明。
4.不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。如【例8-2】中函数s并不向主函数返函数值,因此可定义为:
void s(int n){
/* …… */
}
一旦函数被定义为空类型后,就不能在主调函数中使用被调函数的函数值了。例如,在定义s为空类型后,在主函数中写下述语句
sum=s(n);
就是错误的。
单纯地return 1的一个小程序。
shell 或者调用这个程序的程序会得到返回值,是1。
第二次调用的(echo $?)就是上一次echo $?的值的,因为成功所以是0。
另外楼上说return SUCCESS的,
没有看透本质。
本质就是成功返回0,不成功就返回非零的数。
SUCCESS是一个宏定义,0也是约定俗成的。(可能有标准规定,我木有查。)
grep -r SUCCESS /usr/include
就可以看到,大部分都是返回0x0(十六进制的0),或者0.
至于void,是一种不标准的写法。
返回值随编译器的变化而变化,
没有固定的关系,
但是肯定是不符合C99规范的。
我使用的这个版本的GCC的返回值是最后一个函数的值,
(printf返回它打印的字符串的个数是3)。
void 多见于VC++6.0时代,
也算是当时的后遗症之一。
顺便说一句,
再标准一点的C语言应该是这样写:
int main(int argc,char **argv){}
void main() 严谨的角度说是不存在的 。 蓝色的c plus 写的非常明白,编译器其实只接受两样 int main()和
int main(int argc char *argv[])
1 回答1.4k 阅读
1 回答1.1k 阅读
1 回答918 阅读
868 阅读
812 阅读
729 阅读
671 阅读
考虑一个编译常用命令:
make && make install
它的意思是,如果make返回0,则执行make install。不然,则不执行make install。
如果make命令是C语言写的话,在这里返回的是1还是0,就是在main函数里的return值。如果return值声明为void,那么就没有机会按情况return不同的值了。
然而另一个问题是,void main本身是不对的。按照这个网页链接的解释,C/C++标准从未接受过void为返回值的main声明。
感谢@Mutoo 的指正。