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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3455|回復: 0
打印 上一主題 下一主題
收起左側

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

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

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

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

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

main()
{
printf("output begin/n");
printf("content in buffer/n");
_exit(0);
}
$ ./exit2
output begin
實際上因為第二條printf語句沒有滿 足特定的條件,它們還只是保存在緩沖區內,這時我們用_exit()函數直接將進程關閉,緩沖區中的數據就會丟失,

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

二.exit和return的區別與聯系。

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

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

1,exit用于在程序運行的過程中隨時結束程序,exit的參數是返回給OS的。main函數結束時也會隱式地調用 exit函數。exit函數運行時首先會執行由atexit()函數登記的函數,然后會做一些自身的清理工作,同時刷新所有輸出流、關閉所有打開的流并且關閉通過標準I/O函數tmpfile()創建的臨時文件。exit是結束一個進程,它將刪除進程使用的內存空間,同時把錯誤信息返回父進程,而 return是返回函數值并退出函數
2,return是語言級別的,它表示了調用堆棧的返回;而exit是系統調用級別的,它表示了一個進程的結束。
3.在有返回值的函數中,return語句的作用是提供整個函數的返回值,并結束當前函數返回到調用它的地方。在沒有返回值的函數中也可以使用return語句,例如當檢查到一個錯誤時提前結束當前函數的執行并返回。一般程序執行到 main() 的結束就完成了, 如果想在程序結束時做一些事情, 可以嘗試著用這個函數.
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的區別與聯系。

break 語句通常用在循環語句和開關語句中。當 break 用于開關語句 switch 中時,可使
程序跳出 switch 而執行 switch 以后的語句;如果沒有 break 語句,則將成為一個死循環而
無法退出。
當 break 語句用于 do-while、for、while 循環語句中時,可使程序終止循環而執行循環
后面的語句, 通常 break 語句總是與 if 語句聯在一起。即滿足條件時便跳出循環。
#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附初值,當鍵盤接收到回車或者ESC按鍵,開始接受字符,并且打印到終端,如果鍵盤接收到ESC按鍵,則直接退出while循環。
注意:
1) break 語句對 if-else 的條件語句不起作用。
2) 在多層循環中, 一個 break 語句只向外跳一層。

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

continue和break都可以用于C提供的全部三種循環結構。continue會使循環跳出循環體內剩余的語句,轉而判斷循環條件是否成立,然后選擇是否再次進入循環體。break作用是跳出循環,如果break位于循環嵌套中的一個內循環則僅跳出這個內循環。

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

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久草视频在线播放 | 亚洲日日夜夜 | 精品久久久久久久久久 | 成人性视频免费网站 | 日韩一区不卡 | 色吧久久| 日韩中文字幕免费在线观看 | 操人网 | 九色91视频 | 日韩欧美三级在线 | 成人亚洲| 精品国产欧美一区二区三区成人 | 天天操操 | 亚洲精品不卡 | 午夜综合| 欧美日韩综合精品 | 久草中文网| 午夜激情一区 | 国产伦精品一区二区三区在线 | 无码国模国产在线观看 | 免费一区二区三区 | 中文字幕 在线观看 | 老牛影视av一区二区在线观看 | 日韩在线中文 | 日韩精品一区二区三区中文在线 | 午夜影院 | 国产精品亚洲二区 | 欧美一区二区在线 | 亚洲欧美综合精品另类天天更新 | 99精品视频在线观看免费播放 | 欧美日本韩国一区二区 | 99久久免费观看 | 日本电影网站 | av在线播放不卡 | 一区二区三区四区不卡视频 | 国产精品国产三级国产aⅴ入口 | 亚洲高清在线播放 | 成人免费视频网站在线观看 | 国产一二三区精品视频 | 国产精品久久亚洲 | 国产精品区一区二 |