2010-10-05 1 views
3

Должно ли быть отправлено предупреждение приложения GUI Unix на std :: cerr или std :: cout?Должны ли направляющие сообщения GUI-приложения отправлять в std :: cerr?

Это предполагает, что GUI обычно представляет предупреждения и ошибки в окне консоли, а также отправляет их в файл журнала. Но в том случае, если консоль отсутствует и, следовательно, не может быть использована, следует использовать std :: cerr, std :: cout или std :: clog для таких сообщений?

Я думаю, что std :: cerr - это место, где они принадлежат.

+0

Вы имеете в виду предупреждения компилятора C++ или что делает ваша программа, когда она хочет выпустить предупреждение? –

+0

@Alex Emelianov Предупреждения вашей собственной программы. – WilliamKF

+0

В мире unix мы вынуждены разделить наш вывод на два общих бина: «нормальный» и «ошибка», чтобы наш вывод можно обрабатывать автоматически. Подумайте о сценариях, когда ваша программа будет использоваться для вывода вывода в другую программу. Смогут ли они обработать «предупреждения» как часть вашего нормального выпуска или преимущества их разделения. Это зависит от характера вашего приложения. –

ответ

1

Для компилятора сообщения об ошибке скомпилированного кода являются «нормальными» выводами, поэтому их следует записывать в стандартный вывод, а не в stderr. Единственные сообщения, которые должны быть записаны в stderr, будут связаны с ошибками при запуске самого компилятора (например, если файл, составляющий часть компилятора, не может быть найден, поэтому компилятор не смог запустить).

Та же базовая директива применяется к большинству других программ: если рассматриваемое «сообщение» является частью «стандартного» вывода этой программы, и пользователь обычно ожидает, что он будет включен, когда/если они перенаправляют вывод , то он должен быть записан на стандартный вывод. Стандартная ошибка предназначена для сообщений, которые пользователь обычно хочет/должен видеть, даже если у них есть стандартный выход, перенаправленный в файл - в первую очередь те, которые говорят, что программа не может работать, поэтому нет выхода, или если есть вероятно, будет неполным или недействительным.

+0

Как насчет программы GUI, где вывод этой программы не является главным образом ее выходом в stdout? – WilliamKF

+2

@WilliamKF: программа GUI * обычно * не должна записываться на стандартный вывод или стандартную ошибку вообще. Для действительно драматических проблем, вероятно, следует использовать окно сообщения. В противном случае обычно может быть окно «log», чтобы рассказать о том, что произошло, и/или использовать возможности регистрации событий системы для такого рода работы. –

6

Я предпочитаю cerr. Если трубы пользователь вводит выходные или отправляет его в файл, они могут отказаться от cerr с

tool 2>/dev/null >output 

но положить все в одном потоке оставляет их SOL.

Также cerr небуферизован, поэтому сообщения об ошибках гарантированно появятся независимо от того, насколько сильно вы сработаете и сжечь. И предупреждения должны быть переданы вместе с ошибками, если пользователь заменил /dev/null выше чем-то другим ... Я не уверен, что это отличный аргумент или нет.

4

Если ваша программа предназначена для корректного форматирования вывода, который может быть передан в другую программу или будет проанализирован, лучше перенаправить предупреждения на std::cerr.

1

В Windows ни std :: cerr, ни std :: cout не перенаправлены нигде из программы GUI, они просто переходят к этому большому ведро бит в небе. Я предполагаю, что вы говорите о системах на основе nix.

+1

Правильно, это Unix. – WilliamKF

 Смежные вопросы

  • Нет связанных вопросов^_^