看板 NTUGIEE_EDA 關於我們 聯絡資訊
※ [本文轉錄自 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