久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3385|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

C語言中的return,exit,break,continue

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:104287 發(fā)表于 2016-1-29 18:19 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
C語言中的return,exit,break,continue。前兩個函數(shù)使用的同時通常都會帶上程序退出時的狀態(tài)碼,標(biāo)準(zhǔn)C中有EXIT_SUCCESS和EXIT_FAILURE兩個宏,位于/usr/include/stdlib.h中。
是這樣定義的的:
#define EXIT_FAILURE 1
#define EXIT_SUCCESS 0

一.exit函數(shù)的作用及其與_exit()函數(shù)的區(qū)別。
有庫文件中的定義可知:exit是一個庫函數(shù),exit(1)表示發(fā)生錯誤后退出程序,exit(0)表示正常退出。
在stdlib.h中exit函數(shù)是這樣子定義的:void exit(int status);
這個系統(tǒng)調(diào)用是用來終止一個進(jìn)程的,無論在程序中的什么位置,只要執(zhí)行exit,進(jìn)程就會從終止進(jìn)程的運(yùn)行。
講到exit這個系統(tǒng)調(diào)用,就要提及另外一個系統(tǒng)調(diào)用,_exit,_exit()函數(shù)位于unistd.h中,相比于exit(),_exit()函數(shù)的功能最為簡單,直接終止進(jìn)程的運(yùn)行,釋放其所使用的內(nèi)存空間,并銷毀在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),而exit()在于在進(jìn)程退出之前要檢查文件的狀態(tài),將文件緩沖區(qū)中的內(nèi)容寫回文件。
下面我們通過于printf這個操作緩沖區(qū)的函數(shù)結(jié)合來說明上面的情況:1.exit終止進(jìn)程。
#include
#include

main()
{
printf("output begin/n");
exit(0);
printf("output end/n");
}
執(zhí)行g(shù)cc -o exit1 exit1.c生成exit1,執(zhí)行,只會打印出output begin.
2. exit將緩沖區(qū)內(nèi)容寫回文件。
對應(yīng)每一個打開的文件,在內(nèi)存中都有一片緩沖區(qū),每次讀文件時,會多讀出若干條記錄,這樣下次讀文件時就可以直接從內(nèi)存的緩沖區(qū)中讀 取,每次寫文件的時候,也僅僅是寫入內(nèi)存中的緩沖區(qū),等滿足了一定的條件(達(dá)到一定數(shù)量,遇到特定字符(如換行符/n和文件結(jié)束符EOF)),再將緩沖區(qū) 中的內(nèi)容一次性寫入文件,我們知道
void exit(int status);
exit()用來正常終結(jié)目前進(jìn)程的執(zhí)行,并把參數(shù)status返回給父進(jìn)程,而進(jìn)程所有的緩沖區(qū)數(shù)據(jù)會自動寫回并關(guān)閉未關(guān)閉的文件。
#include
#include

main()
{
printf("output begin/n");
printf("content in buffer");
exit(0);
}
$ ./exit1
output begin
content in buffer
printf()會根據(jù)參數(shù)format字符串來轉(zhuǎn)換并格式化數(shù)據(jù),然后將結(jié)果寫出到標(biāo)準(zhǔn)輸出設(shè)備,直到出現(xiàn)字符串結(jié)束('/0')為止。可見,exit將未出現(xiàn)換行符的語句保存到標(biāo)注輸出文件。
3._exit()不會執(zhí)行清理I/O緩沖的操作。
_exit()用來立刻結(jié)束目前進(jìn)程的執(zhí)行,并把參數(shù)status返回給父進(jìn)程,并關(guān)閉未關(guān)閉的文件。此函數(shù)調(diào)用后不會返回,并且會傳遞SIGCHLD信號給父進(jìn)程,父進(jìn)程可以由wait函數(shù)取得子進(jìn)程結(jié)束狀態(tài)。
#include
#include

main()
{
printf("output begin/n");
printf("content in buffer/n");
_exit(0);
}
$ ./exit2
output begin
實(shí)際上因?yàn)榈诙䲢lprintf語句沒有滿 足特定的條件,它們還只是保存在緩沖區(qū)內(nèi),這時我們用_exit()函數(shù)直接將進(jìn)程關(guān)閉,緩沖區(qū)中的數(shù)據(jù)就會丟失,

和exit比較,return主要用于提供函數(shù)返回值,continue,break語句則大多數(shù)情況下用于循環(huán)中。許多朋友可能會將這三條語句與exit搞混,并且對這三個語句區(qū)分不清楚。

二.exit和return的區(qū)別與聯(lián)系。

當(dāng)然,在進(jìn)程操作中,我們需要來區(qū)分一下exit和return。
1.exit()結(jié)束當(dāng)前進(jìn)程/當(dāng)前程序/,在整個程序中,只要調(diào)用exit就結(jié)束(當(dāng)前進(jìn)程或者在main時候?yàn)檎麄程序)
2.return()是當(dāng)前函數(shù)返回,當(dāng)然如果是在主函數(shù)main, 自然也就結(jié)束當(dāng)前進(jìn)程了,如果不是,那就是退回上一層調(diào)用。在多個進(jìn)程時.如果有時要檢測上進(jìn)程是否正常退出的.就要用到上個進(jìn)程的返回值,依次類推。
進(jìn)程環(huán)境與進(jìn)程控制(1): 進(jìn)程的開始與終止
exit可以返回小于256的任何整數(shù)。返回的不同數(shù)值主要是給調(diào)用者作不同處理的。
單獨(dú)的進(jìn)程是返回給操作系統(tǒng)的。如果是多進(jìn)程,是返回給父進(jìn)程的。父進(jìn)程里面調(diào)用waitpid()等函數(shù)得到子進(jìn)程退出的狀態(tài),以便作不同處理。根據(jù)相應(yīng)的返回值來讓調(diào)用者作出相應(yīng)的處理.總的說來,exit()就是當(dāng)前進(jìn)程把控制權(quán)返回給調(diào)用該程序的程序,括號里的是返回值,告訴調(diào)用程序該程序的運(yùn)行狀態(tài)。
進(jìn)程終止:
C程序的終止分為兩種: 正常終止和異常終止.

正常終止分為: return, exit, _exit, _Exit, pthreade_exit
異常中指分為: abort, SIGNAL, 線程響應(yīng)取消
主要說一下正常終止的前4種, 即exit系列函數(shù)。
return函數(shù)exit函數(shù)區(qū)別:

1,exit用于在程序運(yùn)行的過程中隨時結(jié)束程序,exit的參數(shù)是返回給OS的。main函數(shù)結(jié)束時也會隱式地調(diào)用 exit函數(shù)。exit函數(shù)運(yùn)行時首先會執(zhí)行由atexit()函數(shù)登記的函數(shù),然后會做一些自身的清理工作,同時刷新所有輸出流、關(guān)閉所有打開的流并且關(guān)閉通過標(biāo)準(zhǔn)I/O函數(shù)tmpfile()創(chuàng)建的臨時文件。exit是結(jié)束一個進(jìn)程,它將刪除進(jìn)程使用的內(nèi)存空間,同時把錯誤信息返回父進(jìn)程,而 return是返回函數(shù)值并退出函數(shù)
2,return是語言級別的,它表示了調(diào)用堆棧的返回;而exit是系統(tǒng)調(diào)用級別的,它表示了一個進(jìn)程的結(jié)束。
3.在有返回值的函數(shù)中,return語句的作用是提供整個函數(shù)的返回值,并結(jié)束當(dāng)前函數(shù)返回到調(diào)用它的地方。在沒有返回值的函數(shù)中也可以使用return語句,例如當(dāng)檢查到一個錯誤時提前結(jié)束當(dāng)前函數(shù)的執(zhí)行并返回。一般程序執(zhí)行到 main() 的結(jié)束就完成了, 如果想在程序結(jié)束時做一些事情, 可以嘗試著用這個函數(shù).
example:

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;
}

三.break和continue的區(qū)別與聯(lián)系。

break 語句通常用在循環(huán)語句和開關(guān)語句中。當(dāng) break 用于開關(guān)語句 switch 中時,可使
程序跳出 switch 而執(zhí)行 switch 以后的語句;如果沒有 break 語句,則將成為一個死循環(huán)而
無法退出。
當(dāng) break 語句用于 do-while、for、while 循環(huán)語句中時,可使程序終止循環(huán)而執(zhí)行循環(huán)
后面的語句, 通常 break 語句總是與 if 語句聯(lián)在一起。即滿足條件時便跳出循環(huán)。
#include
main()
{
int i=0;
char c;
while(1)
{
c='/0';
while(c!=13&&c!=27)
{
c=getchar();
printf("%c/n",c);
}
if(c=27)
break;
i++;
printf("the no is %d/n",i);
}
printf("End/n");
}
c='/0'是給變量C附初值,當(dāng)鍵盤接收到回車或者ESC按鍵,開始接受字符,并且打印到終端,如果鍵盤接收到ESC按鍵,則直接退出while循環(huán)。
注意:
1) break 語句對 if-else 的條件語句不起作用。
2) 在多層循環(huán)中, 一個 break 語句只向外跳一層。

continue 語句的作用是跳過循環(huán)本中剩余的語句而強(qiáng)行執(zhí)行下一次循環(huán)。continue 語
句只用在 for、while、do-while 等循環(huán)體中,常與 if 條件語句一起使用,用來加速循環(huán)。
main()
{
char c;
while(c!=13)
{
c=getch();
if(c==0X1B)
continue;
printf("%c/n", c);
}
}

continue和break都可以用于C提供的全部三種循環(huán)結(jié)構(gòu)。continue會使循環(huán)跳出循環(huán)體內(nèi)剩余的語句,轉(zhuǎn)而判斷循環(huán)條件是否成立,然后選擇是否再次進(jìn)入循環(huán)體。break作用是跳出循環(huán),如果break位于循環(huán)嵌套中的一個內(nèi)循環(huán)則僅跳出這個內(nèi)循環(huán)。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线国产精品 | 成人影院在线观看 | 91精品久久久久久久久中文字幕 | 久久久久久久久久久高潮一区二区 | 韩国久久| 国产精品免费一区二区三区四区 | 日韩欧美天堂 | 亚洲一区综合 | 操久久 | 91一区二区三区 | 天天操妹子 | 亚洲午夜在线 | 99久久免费精品视频 | 午夜视频在线 | 欧美激情a∨在线视频播放 成人免费共享视频 | 日韩久久综合 | 国产一级免费在线观看 | 日韩在线一区二区 | 欧美一区二区三区高清视频 | 日本视频一区二区 | av天天看| 国产精品久久久久久吹潮日韩动画 | 亚洲高清网| 久久天天| 天天插天天操 | 最新中文字幕久久 | 国产麻豆乱码精品一区二区三区 | 亚洲视频在线看 | 久草网站 | 久久亚洲一区二区 | 狠狠操狠狠操 | 国产高清免费视频 | www.一级片 | 涩爱av一区二区三区 | 午夜av成人 | www国产亚洲精品久久网站 | 国产免费一二三区 | 久久久久国产一区二区三区四区 | 精品99爱视频在线观看 | 伊人久久大香线 | 一区亚洲|