作者crazying (追殺大象)
看板NTUGIEE_EDA
標題[轉錄]Re: [問題] 請問C++的"cerr"是做什麼用的
時間Sun Jun 26 13:45:57 2005
※ [本文轉錄自 C_and_CPP 看板]
作者: khoguan (Khoguan Phuann) 看板: C_and_CPP
標題: Re: [問題] 請問C++的"cerr"是做什麼用的
時間: Sun Jun 19 12:21:44 2005
※ 引述《oldm (再拚一次吧)》之銘言:
: ※ 引述《cmlrdg (vup 心之語)》之銘言:
: : 如題, 我經常在書上看到這個, 我覺得這個好像跟輸出串流的cout一樣
: : 我自己試過把這兩個交換使用, 感覺也沒有什麼差別, 請各位大大回答一下吧...^^"
: : 謝囉~~~
: : p.s.這個問題不知道會不會很蠢XD
:
: cerr 是標準錯誤輸出 cout 是標準輸出
: 這兩個的輸出同樣都在螢幕上(只要你沒redirect的話) 但不同的是
: cerr 會馬上輸出 而 cout 通常會 buffer 住資料, 過一段時間再輸出
: 所以 cerr 通常用來輸出錯誤訊息(因為可以即時反應)
: 但如果你想把 cerr 拿來輸出一般訊息 cout 拿來輸出錯誤訊息也不是不行拉
: --
: 推 UNARYvvv:用cerr就unbuffered嚕~redirect還是顯示到螢幕~ 218.161.7.41 06/18
: 推 oldm:是喔? 所以cerr沒辦法redirect嗎? 140.112.251.34 06/19
除了 unbuffered 和 buffered 的差別外,最大的差別及用處
就是可以分別 redirect(重導) 到不同地方,雖然預設都輸出
到螢幕上,但是一重導就可以看出不同。好比說,正常的輸出
就用 cout, 錯誤狀態的提醒及輸出就用 cerr, 那麼就可單獨
將 cerr 重導到一個檔案中,而 cout 仍然透過螢幕輸出,或
是相反的做法,cerr 到螢幕,cout 到檔案,這樣都可以很清
楚的區分正常的輸出與異常的狀態訊息。不亦讚乎?
cerr 重導到檔案
my.exe 2> err.log
cout 重導到檔案
my.exe > output
cerr 重導到一個檔,cout 重導到另一檔
my.exe 2> err.log > output
這樣打也行
my.exe > output 2> err.log
若是在 Unix/Linux 環境下的話,還有種種有趣的變化及應用。
說不完的。
C++ 的標準 I/O stream object 有 cin, cout, cerr 及 clog
clog 和 cerr 同樣都是要輸出「非正常的程式輸出」,但是 clog
是 buffered, 所以若是一開始就打算輸出到 log 檔,有空時再去
檢查 log 檔的內容,那就用 clog, 可以減少耗費系統資源,不用
每輸出一次就做 flush 的動作,這樣寫檔,系統會比較累。 XD
clog 因此適合 non-critical debugging and error messages output
另外 C++ 還有寬字元版的 wcin, wcout, wcerr, 及 wclog 哦!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.208.166
→ UNARYvvv:請問 exe 2> out 那個 2> 是什麼意思呢?? 61.70.137.117 06/19
→ khoguan:2> 表示 standard error 要輸出到哪裡220.130.208.166 06/19
推 UNARYvvv:謝謝~ 61.70.137.117 06/19
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.4.240
推 bluetai:這個好用~ 140.112.233.88 06/26
→ gwliao:我都以為cerr跟stderr一樣, 原來還有差別 Orz140.112.230.224 06/27