C++中关于return的⽤法总结
关于C语⾔中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 program
ming 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. 那么 intmain(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();
……
……
return 0;
}
return在c语言中是什么意思return语句后⾯具体是什么内容,这就要具体情况具体分析了:
(1)在返回类型是char的函数中,return后应该是char类型的值;
(2)在返回类型是int的函数中,如果是要停⽌函数的调⽤,最好应该为0;其他的按照你的⽬的⽽定,只要是int 类型就⾏了(3)在返回类型是结构类型的函数中,return后应该是结构的⼀个实例对象。
总之,函数定义为什么样的返回类型,该函数中return后就应该是相应类型的值。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论