关于return、exit、continue和break的比较

来源:互联网 发布:淘宝帐号已被限制登录 编辑:程序博客网 时间:2024/05/16 09:12

return:用于结束一个函数,并赋值给函数返回值,在main函数中使用效果等同于exit

exit:用于结束一个进程

continue:使while或for或switch循环从循环体顶端开始

break:可以立即终止循环,使程序跳转到循环体外继续执行

举例:

1、return函数

#include<stdio.h>

int main()

{

    printf("Hello World\n");

    return 0;

}

2、exit函数

exit 是一个库函数,在头文件#include<stdlib.h>中

exit(1) 表示发生错误后退出程序,exit(0) 表示正常退出

这个系统调用是用来终止一个进程的,无论在程序中的什么位置,只要执行exit,进程就会从终止进程的运行。

#include <stdlib.h>
#include <stdio.h>

main()
{
printf("output begin/n");
exit(0);
printf("output end/n");
}

运行结果:output begin

在linux平台下

exit()用来正常终结目前进程的执行,并把参数status返回给父进程,而进程所有的缓冲区数据会自动写回并关闭未关闭的文件。

#include <stdlib.h>
#include <stdio.h>

main()
{
printf("output begin/n");
printf("content in buffer");
exit(0);
}
$ ./exit1
output begin
content in buffer
printf()会根据参数format字符串来转换并格式化数据,然后将结果写出到标准输出设备,直到出现字符串结束('/0')为止。可见,exit将未出现换行符的语句保存到标注输出文件。
3._exit()不会执行清理I/O缓冲的操作。
_exit()用来立刻结束目前进程的执行,并把参数status返回给父进程,并关闭未关闭的文件。此函数调用后不会返回,并且会传递SIGCHLD信号给父进程,父进程可以由wait函数取得子进程结束状态。
#include <stdio.h>
#include <unistd.h>

main()
{
printf("output begin/n");
printf("content in buffer/n");
_exit(0);
}
$ ./exit2
output begin
实际上因为第二条printf语句没有满 足特定的条件,它们还只是保存在缓冲区内,这时我们用_exit()函数直接将进程关闭,缓冲区中的数据就会丢失。

3、return函数exit函数区别:

1,exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。main函数结束时也会隐式地调用 exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程,而 return是返回函数值并退出函数。
2,return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
3.在有返回值的函数中,return语句的作用是提供整个函数的返回值,并结束当前函数返回到调用它的地方。在没有返回值的函数中也可以使用return语句,例如当检查到一个错误时提前结束当前函数的执行并返回。一般程序执行到 main() 的结束就完成了, 如果想在程序结束时做一些事情, 可以尝试着用这个函数.
#include<stdio.h>
#include<stdlib.h>


void test1(void)
{
printf("exit test1\n");
}


void test2(void)
{
printf("exit test2\n");
}


int main()
{
atexit(test1);
atexit(test2);
printf("exit main\n");
return 0;
}

运行结果:

 exit main

exit test2

exit test1

4、continue和break的异同

continue和break都可以用于C提供的全部三种循环结构。continue会使循环跳出循环体内剩余的语句,转而判断循环条件是否成立,然后选择是否再次进入循环体。break作用是跳出循环,如果break位于循环嵌套中的一个内循环则仅跳出这个内循环。

#include<stdio.h>
int main()
{
int k=0;
char c='A';
do {
switch(c++){
case 'A':
k++;
break;
case 'B':
k--;
case 'C':
            k+=2;
            break;
        case 'D':
            k%=2;
            continue;
        case 'E':
            k*=10;
            break;
        default:
            k/=3;
}
k++;
}while(c<'G');
printf("k=%d\n",k);
return 0;
}

运行结果:k=4

break 语句通常用在循环语句和开关语句中。当 break 用于开关语句 switch 中时,可使
程序跳出 switch 而执行 switch 以后的语句;如果没有 break 语句,则将成为一个死循环而
无法退出。
当 break 语句用于 do-while、for、while 循环语句中时,可使程序终止循环而执行循环
后面的语句, 通常 break 语句总是与 if 语句联在一起。即满足条件时便跳出循环。

continue 语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。continue 语
句只用在 for、while、do-while 等循环体中,常与 if 条件语句一起使用,用来加速循环。

下面实现任意偶数分解为两个素数之和:

#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c,d;
while(1)
{
printf("请输入任意>6的偶数:");
   scanf("%d",&a);
   for(b=3;b<a/2;b+=2)
{
   for(c=2;c<=sqrt(b);c++)
   if(b%c==0)break;
   if(c<=sqrt(b))continue;
   d=a-b;
for(c=2;c<=sqrt(d);c++)
if(d%c==0)break;
if(c<sqrt(d))continue;
printf("结果是:%d=%d+%d\n",a,b,d);
}
}
return 0;
}

原创粉丝点击