在函数中,假如碰到return 句子,那么程序就会回来调用该函数的下一条句子履行,也便是说跳出函数的履行,回到本来的当地持续履行下去。可是假如是在主函数中碰到return句子,那么整个程序就会中止,退出程序的履行。
——————————————————————————————————————————————————————–
return是C++预界说的句子,它供给了栽培函数履行的一种扩大。当return句子供给了一个值时,这个值就成为函数的回来值.
提到return,有必要提及主函数的界说,下面是从网络上找到的材料,好好消化吧,对了解主函数中回来值的了解有很大的协助.
很多人乃至市面上的一些书本,都运用了void main( ) ,其实这是过错的。C/C++ 中历来没有界说过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* … */ } is not and never has been C++, nor has it even been C.( void main( ) 历来就不存在于 C++ 或许 C )。下面我分甭说一下 C 和 C++ 规范中对 main 函数的界说。
1. C
在 C89 中,main( ) 是能够承受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨作 The C programming Language 2e(《C 程序设计语言第二版》)用的便是 main( )。不过在最新的 C99 规范中,只需以下两种界说方法是正确的:
int main( void )
int main( int argc, char *argv[] )
(参考材料:ISO/IEC 9899:1999 (E) Programming languages — C 5.1.2.2.1 Program startup)
当然,咱们也能够做一点小小的改动。例如:char *argv[] 能够写成 char **argv;argv 和 argc 能够改成其他变量名(如 intval 和 charval),不过必定要契合变量的命名规矩。
假如不需要从命令行中获取参数,请用int main(void) ;不然请用int main( int argc, char *argv[] ) 。
main 函数的回来值类型有必要是 int ,这样回来值才干传递给程序的激活者(如操作体系)。
假如 main 函数的最终没有写 return 句子的话,C99 规则编译器要主动在生成的方针文件中(如 exe 文件)参加return 0; ,表明程序正常退出。不过,我仍是主张你最好在main函数的最终加上return 句子,尽管没有这个必要,但这是一个好的习气。留意,vc6不会在方针文件中参加return 0; ,大约是由于 vc6 是 98 年的产品,所以才不支撑这个特性。现在了解我为什么主张你最好加上 return 句子了吧!不过,gcc3.2(Linux 下的 C 编译器)会在生成的方针文件中参加 return 0; 。
2. C++
C++98 中界说了如下两种 main 函数的界说方法:
int main( )
int main( int argc, char *argv[] )
(参考材料:ISO/IEC 14882(1998-9-01)Programming languages — C++ 3.6 Start and termination)
int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char *argv[] ) 的用法也和 C99 中界说的相同。相同,main 函数的回来值类型也有必要是int。假如main函数的结尾没写return句子,C++98 规则编译器要主动在生成的方针文件中参加 return 0; 。相同,vc6 也不支撑这个特性,可是 g++3.2(Linux 下的 C++ 编译器)支撑。
3. 关于 void main
在 C 和 C++ 中,不接纳任何参数也不回来任何信息的函数原型为“void foo(void);”。或许正是由于这个,所以很多人都误认为假如不需要程序回来值时能够把main函数界说成void main(void) 。可是这是过错的!main 函数的回来值应该界说为 int 类型,C 和 C++ 规范中都是这样规则的。尽管在一些编译器中,void main 能够经过编译(如 vc6),但并非一切编译器都支撑 void main ,由于规范中历来没有界说过 void main 。g++3.2 中假如 main 函数的回来值不是 int 类型,就底子通不过编译。而 gcc3.2 则会宣布正告。所以,假如你想你的程序具有很好的可移植性,请必定要用 int main 。
4. 回来值的效果
main 函数的回来值用于阐明程序的退出状况。假如回来 0,则代表程序正常退出,不然代表程序反常退出。下面咱们在 winxp 环境下做一个小试验。首要编译下面的程序:
int main( void )
{
return 0;
}
然后翻开附件里的“命令提示符”,在命令行里运转方才编译好的可履行文件,然后输入“echo %ERRORLEVEL%”,回车,就能够看到程序的回来值为 0 。假定方才编译好的文件是 a.exe ,假如输入“a && dir”,则会列出当时目录下的文件夹和文件。可是假如改成“return -1”,或许其他非 0 值,从头编译后输入“a && dir”,则 dir 不会履行。由于 && 的意义是:假如 && 前面的程序正常退出,则持续履行 && 后边的程序,不然不履行。也便是说,运用程序的回来值,咱们能够操控要不要履行下一个程序。这便是 int main 的优点。 假如你有爱好,也能够把 main 函数的回来值类型改成非 int 类型(如 float),从头编译后履行“a && dir”,看看会呈现什么状况,想想为什么会呈现那样的状况。趁便提一下,假如输入 a || dir 的话,则表明假如 a 反常退出,则履行 dir 。
5. 那么 int main(intargc,char*argv[],char*envp[])呢?
这当然也不是规范 C 里边界说的东西!char*envp[] 是某些编译器供给的扩展功用,用于获取体系的环境变量。由于不是规范,所以并非一切编译器都支撑,故而移植性差,不引荐运用。
到了这儿,你应该了解为什么主函数界说为 int回来类型,并且函数体里边有return 0;这个句子了吧.
下面详细说说我对return的使用的了解。
只需一个函数的回来值是数字型的,那么就能够回来0(即return 0),其实你回来多少都没问题。一 般状况下,C++做出来的函数都要求回来一个值,当函数履行正常,且达到了一般状况下的意图,那么就回来0表明正确的调用了该函数,这个0便是回来给主调 函数以告诉没有犯错的;假如函数调用中犯错,或许没有依照一般状况履行,那么就回来1,以奉告主调函数采纳呼应战略;假如你在某个函数地点类的界说地点的 头文件中界说了一组状况值(一般都是负整数),那么函数就能够回来不同的值以告之主调函数详细发生了什么反常或过错,这种状况一般用于函数功用独立性较差 的的状况。所以一般不鼓舞把函数回来类型界说为void,至少回来应该是int,而在函数的最终加上return 0.句子:
int func(参数列表)
{
……
……
……
Return 0;
}
在函数中,假如碰到return 句子,那么程序就会回来调用该函数的下一条句子履行,也便是说跳出函数的履行,回到本来的当地持续履行下去。可是假如是在主函数中碰到return句子,那么整个程序就会中止,退出程序的履行。
假如你界说一个函数有回来类型,能够想下面那样调用:
int func()
{
int value;
……
……
……
return value;
}
int main()
{
int intvalue;
intvalue=func();
……
……
teturn 0;
}
return句子后边详细是什么内容,这就要详细状况详细分析了:
(1) 在回来类型是char的函数中,return后应该是char类型的值;
(2) 在回来类型是int的函数中,假如是要中止函数的调用,最好应该为0;其他的依照你的意图而定,只需是int 类型就行了
(3) 在回来类型是结构类型的函数中,return后应该是结构的一个实例目标。
总归,函数界说为什么样的回来类型,该函数中return后就应该是相应类型的值。