作者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
1F:→ UNARYvvv:请问 exe 2> out 那个 2> 是什麽意思呢?? 61.70.137.117 06/19
2F:→ khoguan:2> 表示 standard error 要输出到哪里220.130.208.166 06/19
3F:推 UNARYvvv:谢谢~ 61.70.137.117 06/19
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.4.240
4F:推 bluetai:这个好用~ 140.112.233.88 06/26
5F:→ gwliao:我都以为cerr跟stderr一样, 原来还有差别 Orz140.112.230.224 06/27