2009年2月4日 星期三

return與exit的區別

exit是結束一個程序,它將刪除程序使用的記憶體空間,同時把錯誤訊息回傳給父程序,在父程序中wait系統呼叫將接受到此返回訊息。

例子:
void a()
{
  exit();
}
void main()
{
  while(1)
  {
    a();
  }
}

這個程序並不會死循環,因為在a函數中調用exit,所以整個程序就結束了。但如果你在a函數中使用return,那麼就是個死循環了。

例子2:
#include <iostream.h>
using namespace std;
class bbb
{
    public:
        bbb();
        ~bbb();
};

bbb::bbb()
{
    // do nothing
}

bbb::~bbb()
{
    cout << "destruct" << endl;;
}

main()
{
    bbb b;
    //exit(0);
    return 0;
}

然後把//exit(0)的註釋去掉再編譯運行一次。會有不同的結果。

答:當沒有exit(0)時,return 0時,系統會輸出並清理緩衝區並關閉標準輸入cin、標準輸出cout、標準錯誤cerr、標準日誌clog。

當有exit(0)時,c函數會輸出並清理stdin, stdout,現在stdout已經被關閉了,在執行return 0時,cout的緩衝區的數據已經沒有寫入的目標了,所以無輸出。

這只能說明cout和stdout, cin 和stdin用的是不同的緩衝區。

參考資料:
return與exit的區別是什麼?
return和exit的區別

沒有留言: