LINUX.ORG.RU

C++ кто что использует: \n или endl или \r\n

 


0

1

и почему?
Для написания кроссплатформенных программ.
экивалентно ли «\n» «\r\n» «endl»
Что НУЖНО использовать?
С точки зрения быстродействия, кроссплатформенности, итд?
У кого какие возникали проблемы при переносе программ? (по теме топика)



Последнее исправление: qwertyqw (всего исправлений: 1)
Ответ на: комментарий от DELIRIUM

аналогичен << «\n» << std::flush; Так что лучше использовать его.

Да, аналогичен. Но зачем сбрасывать буфер после каждой строки?

no-such-file ★★★★★
()

Я ваще с++ не использую. \n.

Deleted
()
Ответ на: комментарий от DELIRIUM

О май год, ещё и std::flush
По поводу буфера - как определяется, когда следует выгружать буфер? По завершению блока {}, или как-то ещё? (Или это сокрыто мраком и решает отдельный компилятор?)

qwertyqw
() автор топика
Ответ на: комментарий от qwertyqw

прочитал, что буфер выгружаетсся в 2х случаях: при endl-flush и при просто flush. или ещё когда нибудь?
Подразумеваю работу с HDD

qwertyqw
() автор топика
Ответ на: комментарий от qwertyqw

Эмм, а это что такое?

Это тонкий намёк, на то, что не надо такие вещи хардкодить. Нужно брать из конфигурации приложения.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Да, как-то неподумал, спасибо, Кэп
А по поводу размера буфера (как посмотреть?)- он разный для каждой системы\консоли, или выбирается компилятором/или стандартный для всех систем?
или тоже слишком хардкорно smile.gif

qwertyqw
() автор топика
Ответ на: комментарий от qwertyqw

как определяется, когда следует выгружать буфер? По завершению блока {}, или как-то ещё? (Или это сокрыто мраком и решает отдельный компилятор?)

это зависит от того, ЧТО и КУДА ты выводишь. На первое время могу посоветовать после каждого \n.

emulek
()
Ответ на: комментарий от tailgunner
$ ./run.sh
+ cat ./run.sh
#!/bin/bash -x

cat $0

gcc -x c - <<EOF
#include <stdio.h>
int main() {
  printf("1");
  printf("2");
  printf("3");
  printf("\n");
  printf("4");

  printf("1");
  printf("2");
  printf("3");
  printf("\n"); fflush(stdout);
  printf("4");

  return 0;
}
EOF

strace -ff -e write ./a.out >/dev/null

g++ -x c++ - <<EOF
#include <iostream>
using namespace std;
int main() {
  cout<<"1";
  cout<<"2";
  cout<<"3";
  cout<<"\n";
  cout<<"4";

  cout<<"1";
  cout<<"2";
  cout<<"3";
  cout<<endl;
  cout<<"4";

  return 0;
}
EOF

strace -ff -e write ./a.out >/dev/null

+ gcc -x c -
+ strace -ff -e write ./a.out
write(1, "123\n4123\n", 9)              = 9
write(1, "4", 1)                        = 1
+++ exited with 0 +++
+ g++ -x c++ -
+ strace -ff -e write ./a.out
write(1, "123\n4123\n", 9)              = 9
write(1, "4", 1)                        = 1
+++ exited with 0 +++
anonymous
()
Ответ на: комментарий от DELIRIUM

Лучше кому? Не нужен буфер, есть std::cerr, нужна буферизация, зачем ее сбрасывать после каждой строки?

comp00 ★★★★
()
Ответ на: комментарий от tailgunner

printf(«\n») - это fwrite(«\n», 1, 1, stdout) и fflush(stdout).

это не правда

anonymous
()
Ответ на: комментарий от anonymous

Коллега указал на обман в твоих словах

Той коллега запостил длинную невнятную фигню, хотя с тем же успехом мог просто сказать «Ты лжешь». Как сделал другой твой коллега %)

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Да, аналогичен. Но зачем сбрасывать буфер после каждой строки?

Если это логгер, то лучше сбрасывать каждую строку.

andreyu ★★★★★
()
19 апреля 2015 г.
Ответ на: комментарий от andreyu

Если это логгер, то лучше сбрасывать каждую строку.

Почему тогда не использовать небуферизованный stderr?

annulen ★★★★★
()

Изредка увлекаюсь олимпиадным программированием, так перевод строки с помощью endl может добавить 1-2 секунды на больших массивах данных, при ограничении времени 2 секунды на задачу. Поэтому предпочитаю '\n'. А уже перед return'ом в main делаю endl либо flush. Иначе задача слита. Кстати, винде уже практически наплевать '\n' или «\r\n». Так что выгодно юзать'\n'.

Deleted
()
Ответ на: комментарий от annulen

Потому, что это не всегда stderr и не всегда нужен небуферизованый, а флашить бывает к месту.

deep-purple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.