ورود

View Full Version : سوال: تفاوت تابع cerr با cout



sourcecode
دوشنبه 19 بهمن 1394, 16:34 عصر
تابع cerr همانند cout برای نمایش پیغام استفاده میشود ولی تو کتابها میگن که تابع cerr برای نمایش پیغام خطاست , منظورش از این پیغام خطا چیه ? ما همون متنی رو که بهش دادیمو چاپ میکنه پس فرقش با cout چیه ؟ مثلا :
Fstream f1;
If( f1.is_open() )
{
Cerr«”no open file”;
Exit(0);
}
اگر شرط داخل if برقرار باشه ”no open file” رو چاپ میکنه و برنامه متوقف میشه ... میخوام بدونم پیغام خطایی که صادر میکنه جایی میره یا از cerr در جاهای خاصی استفاده میشه یا . . . ؟ ؟ ؟

کامبیز اسدزاده
چهارشنبه 21 بهمن 1394, 11:04 صبح
تابع cerr همانند cout برای نمایش پیغام استفاده میشود ولی تو کتابها میگن که تابع cerr برای نمایش پیغام خطاست , منظورش از این پیغام خطا چیه ? ما همون متنی رو که بهش دادیمو چاپ میکنه پس فرقش با cout چیه ؟ مثلا :
Fstream f1;
If( f1.is_open() )
{
Cerr«”no open file”;
Exit(0);
}
اگر شرط داخل if برقرار باشه ”no open file” رو چاپ میکنه و برنامه متوقف میشه ... میخوام بدونم پیغام خطایی که صادر میکنه جایی میره یا از cerr در جاهای خاصی استفاده میشه یا . . . ؟ ؟ ؟

خب ببینید cout یک شئ خروجی استاندارده اما cerr شئ خروجی خطای استاندارده و مخصوص خطا بهینه شده فرقشون این هست که cerr بافر شده نیست همچنین مختص خطاهای استاندارد موجود بر روی تمامی سیستمها طراحی شده که بر اساس کد خطای هر کدام از آن ها میتونه دقیقترین خطای مرتبط رو نمایش بده در حالی که cout چنین قابلیتی رو نداره و بافر شده هست و درضمن سرعت cout بیشتر از cerr هستش و مخصوص خروجی های منظمه در حالی که cerr برای خروجی خطا و همچنین clog هم جهت گزارش هایی مورد استفاده قرار میگیره.

هر سه گزینه شبیه هم عمل میکنن با فرق اینکه cerr به صورت انحصاری جهت خطایابی مورد استفاده میگیره.