Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/65: Рейтинг темы: голосов - 65, средняя оценка - 4.63
19 / 19 / 14
Регистрация: 25.02.2015
Сообщений: 138

Cerr и clog

18.03.2015, 22:15. Показов 13910. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня собственно бональнвй вопрос.. Перелопатил гугл, но так и не дошло Объясните простому смертному, какие преимущества нам дадут потоки cerr и clog. И когда их лучше использовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.03.2015, 22:15
Ответы с готовыми решениями:

Операторы Cerr, Clog
Помогите пожалуйста разобраться. Я уже довольно долгр прогрммирую на C++, но с операторами cerr и clog не встречался. Немного почитал о них...

Что и в каких случаях лучше использовать: cerr, clog, cout ?
Доброго времени суток! Подскажите пожалуйста, когда лучше использовать cerr, clog, cout? При буферизованном вводе/выводе данные сначала...

cout и clog
Объекты cout и clog используют "беферизированный механизм" (данные сперва записываются в память. После заполнения участка, выгружаются...

17
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
19.03.2015, 01:17
Цитата Сообщение от Mistik Посмотреть сообщение
Объясните простому смертному, какие преимущества нам дадут потоки cerr и clog.
cout используется для нормального вывода программы. cerr для вывода ошибок, а clog для логгирования...
Это разные потоки вывода, но по умолчанию они ведут в консоль.
Но, например, если поток вывода программы перенаправить в файл, то это коснется только cout.
Т.е. нормальный вывод программы будет писаться в файл, а ошибки выводиться в консоль.
2
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
19.03.2015, 01:37
cout - вывод обычной информации
clog - логи (результат работы приложения)
cerr - ошибки

Преимущество в том, что каждый объект занимается своей задачей, в результате пользователь не увидит ни логов, ни ошибок, а ваши волосы будут мягкими и шелковистыми(с).

Ещё cerr ведёт в stderr. А это специальный не буферизированный поток для вывода ошибок.

Добавлено через 1 минуту
Можете почитать про принцип работы stderr. Он не будет ждать спец. команды flush как, например, stdout, он просто сразу выведет информацию.
2
19 / 19 / 14
Регистрация: 25.02.2015
Сообщений: 138
19.03.2015, 09:28  [ТС]
MrGluck, nonedark2008, в общем cerr - лучше использовать для вывода ошибок на экран/файл, а clog - для вывода логов на экран/файл?

Добавлено через 29 минут
Ещё один вопрос, касаемо раздела "Обработка ошибок".

Если обрабатывать так, то это сделано для отловки ВСЕХ (?) ошибок:
C++
1
2
3
4
5
6
7
8
try 
{
    //...
}
catch(Exception& e)
{
    ShowMessage(e.Message);
}
А если так:
C++
1
2
3
4
5
6
7
8
try 
{
    //...
}
catch(std::bad_array_new_length& e)
{
    ShowMessage(e.what());
}
то для отловки исключений std::bad_array_new_length.

Собственно вопрос: я так понимаю второй вариант предпочтительнее первого, когда в блоке
C++
1
try { /* ... */ }
вызывается несколько исключений, и нужно обработать каждое по своему. Верно?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.03.2015, 10:34
Mistik, Да.
1
19 / 19 / 14
Регистрация: 25.02.2015
Сообщений: 138
19.03.2015, 13:05  [ТС]
ForEveR, MrGluck, nonedark2008, спасибо
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
19.03.2015, 13:23
Цитата Сообщение от Mistik Посмотреть сообщение
вызывается несколько исключений, и нужно обработать каждое по своему. Верно?
Да. Только помните, что исключения обходят блоки catch с проверкой на соответствие последовательно, а значит второй вариант лучше поставить над первым, иначе все std::bad_array_new_length& e будут перехвачены как Exception &e. Это если под классом Exception подразумевать std::exception или производный от него.
2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.03.2015, 13:37
Цитата Сообщение от MrGluck Посмотреть сообщение
или производный от него.
А вот с этим бы я поспорил.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <stdexcept>
 
class Exception : public std::exception
{
public:
   const char* what() const noexcept { return "general exception"; };
};
 
int main()
{
   try
   {
      throw std::bad_alloc();
   }
   catch (const Exception& e)
   {
      std::cout << e.what() << std::endl;
   }
   catch (const std::bad_alloc& e)
   {
      std::cout << e.what() << std::endl;
   }
}
bad_array_new_length мой gcc не видит, но судя по http://en.cppreference.com/w/c... new_length он наследуется от bad_alloc.
3
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
19.03.2015, 13:47
Mistik, Ты тоже Лафоре главу про потоки читаешь?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
19.03.2015, 15:31
Цитата Сообщение от Mistik Посмотреть сообщение
Объясните простому смертному, какие преимущества нам дадут потоки cerr и clog
Преимущество появляется тогда, когда при вызове программы есть возможность разные потоки развести по разным местам. Я не знаю, как с этим работать под windows, а потому покажу, как этим пользоваться под linux

C
#include <stdio.h>
 
int main (void)
{
  fprintf (stdout, "good print 1\n");
  fprintf (stderr, "error 1\n");
  fprintf (stdout, "good print 2\n");
  fprintf (stderr, "error 2\n");
 
  return 0;
}
При простом запуске мы не видим никаких очевидных преимуществ:

Code
$ gcc t.c
 
$ ./a.out
good print 1
error 1
good print 2
error 2
Преимущества появятся как только мы разведём эти два потока вывода:

Code
$ ./a.out > out.txt 2> err.txt
 
$ cat out.txt
good print 1
good print 2
 
$ cat err.txt
error 1
error 2
В итоге мы видим, что вместо одной большой свалки из полезных сообщений и сообщений об ошибке мы получили мух отдельно, а котлеты отдельно
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.03.2015, 16:14
Mistik, А что ты имеешь ввиду под Exception - это System.SysUtils.Exception?

VCL как бы имеет свою иерархию исключений и обрабатывает немного иначе исключения.
0
19 / 19 / 14
Регистрация: 25.02.2015
Сообщений: 138
19.03.2015, 18:16  [ТС]
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Mistik, Ты тоже Лафоре главу про потоки читаешь?
Не Лафоре, а Николаи М. Джосаттис.
Цитата Сообщение от Avazart Посмотреть сообщение
Mistik, А что ты имеешь ввиду под Exception - это System.SysUtils.Exception?
Да , изначально имел ввиду его.
То есть как я понимаю, с помощью System.SysUtils.Exception нельзя будет отловить исключения std::exception и его производные (это разные виды?) ?
Цитата Сообщение от Evg Посмотреть сообщение
В итоге мы видим, что вместо одной большой свалки из полезных сообщений и сообщений об ошибке мы получили мух отдельно, а котлеты отдельно
Спасибо, на более наглядном примере всё понятно Возможно кто-то подскажет как развести потоки в Win (если такое возможно).
ForEveR, благодарю за столь хороший пример
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.03.2015, 18:23
Цитата Сообщение от Mistik Посмотреть сообщение
То есть как я понимаю, с помощью System.SysUtils.Exception нельзя будет отловить исключения std::exception и его производные (это разные виды?) ?
Как я помню да - нельзя, так как разные иерархии.

Добавлено через 5 минут
Цитата Сообщение от Mistik Посмотреть сообщение
Возможно кто-то подскажет как развести потоки в Win (если такое возможно).
Что значит развести?
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
19.03.2015, 18:25
Mistik, а тебе не рано ли эту книгу читать? Советую сперва Лафоре прочитать, или ты уже знаком с классами, наследованием, вирт. ф-циями, полиморфизмом, указателями и прочими вещами?
0
19 / 19 / 14
Регистрация: 25.02.2015
Сообщений: 138
19.03.2015, 18:29  [ТС]
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Mistik, а тебе не рано ли эту книгу читать? Советую сперва Лафоре прочитать, или ты уже знаком с классами, наследованием, вирт. ф-циями, полиморфизмом, указателями и прочими вещами?
Лафоре была первой книгой) Просто в Николаи М. Джосаттис немного поглубже всё это рассматривается, да и рассматриваю всё это в борланде, где исключения System.SysUtils.Exception. Поэтому и возникли вопросы)

Цитата Сообщение от Avazart Посмотреть сообщение
Что значит развести?
Цитата Сообщение от Evg Посмотреть сообщение
Преимущества появятся как только мы разведём эти два потока вывода:
Код Code
$ ./a.out > out.txt 2> err.txt
$ cat out.txt
good print 1
good print 2
$ cat err.txt
error 1
error 2
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
19.03.2015, 18:34
Цитата Сообщение от Mistik Посмотреть сообщение
Возможно кто-то подскажет как развести потоки в Win (если такое возможно).
Абсолютно так же.
Code
1
123.exe > out.txt 2> err.txt
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.03.2015, 18:34
wiki Перенаправление_ввода-вывода
https://support.microsoft.com/ru-ru/kb/110930/ru
http://www.windowsfaq.ru/content/view/260/57/
1
19 / 19 / 14
Регистрация: 25.02.2015
Сообщений: 138
19.03.2015, 18:45  [ТС]
MrGluck, Avazart, благодарю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2015, 18:45
Помогаю со студенческими работами здесь

cerr
Объясните почему используют std::cerr для вывода ошибок,а не обычный std::cout к примеру?

cerr
объясните пожалуйста что делает cerr? cerr - объект класса ostream, который представляет стандартный ошибочный поток. что значит...

exception и cerr
Страуструп пишет &quot;... Если мы не перехватим исключение, связанное с выходом за границу допустимого диапазона индексов, или иные...

Перенаправление std::cerr
Всем доброго времени суток! Возможно вопрос очень простой, но вразумительного ответа найти не смог. Необходимо перенаправить вывод из...

Поясните: cerr << "Вызов dcopy файл1 файл2 \n";
Приветствую всех, необходима ваша помощь: В разрабатываемой программе одни из пунктов, которые надо реализовать, КОПИРОВАНИЕ и СРАВНЕНИЕ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru