Любая причина сначала печатать NL, затем текст, затем вручную, по сравнению с печатным текстом и NL? - PullRequest
0 голосов
/ 20 сентября 2018

Мне недавно нужно было отладить какой-то действительно старый унаследованный код, в основном разработанный для какого-то микроконтроллера.

В этом коде все вызовы printf следуют одному и тому же соглашению:

fprintf(outfile, "\r\nFormat %d", someinteger);
fflush(outfile);

Как видите, код сначала печатает NL (а код CR был написан Win98-ветеран), затем текст.В конце он вручную сбрасывает файл (иногда stdout, иногда обычный FILE*).Насколько мне известно, это трудоемко, поскольку печать \n уже сбрасывает дескриптор, поэтому следующего кода будет достаточно.

fprintf(outfile, "Format %d\r\n", someinteger);

Есть ли какая-либо причина для выбора первого фрагмента для печати текста и ручной очистки дескриптора по сравнению со вторым фрагментом, в котором значение очистки равно \n?

1 Ответ

0 голосов
/ 20 сентября 2018

Как старый динозавр, питающийся молоком Fortran IV, K & R C и Unix V7, я могу понять этот код.

Исходное значение \r\n гарантирует, что в любом режиме консоли курсор будет расположен наначало строки.Как ветеран последовательной линии, я часто видел консоль, оставленную в необработанном режиме, потому что полноэкранная программа (читай проклятия ...) потерпела крах и не смогла восстановить приготовленный режим.И мы должны набрать stty sane ^J (да Ctrl + J , а не Return , который только отправил бесполезный ^M), чтобы восстановить его.

fflush после \n все еще имеет смысл, если вывод может быть перенаправлен в файл или канал.Потому что автоматическая очистка после \n происходит (только в Unix / Linux), когда вывод идет напрямую на терминал, а не когда он идет в файл или канал.Поэтому я бы сказал, что этот код предполагается использовать в довольно враждебной среде и просто делает все возможное, чтобы текст был читабельным.

...