LINUX.ORG.RU

Ответ на: комментарий от lester

Ты еще не лопнул от бесконечных передергиваний? ;) Это ты свел все на i18n, я утверждал, что потоки в принципе более удобны и надежны.
Кстати, я не видел твой код в ответ на это:
http://www.linux.org.ru/jump-message.jsp?msgid=4674711&cid=4681925
Это не больно (с)

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

> printf( _(«item %d of %d\n»), i, n );

cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n << endl;


да, несомненно второй вариант и читабельней, и компактней, и уж точно быстрей работает - я был не прав

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

> Кстати, я не видел твой код в ответ на это:

а я что-то писал про scanf? о_О, речь шла про форматированный вывод

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

В разных языках может быть разная последовательность. Поэтому даже чистый printf задачу не решит, не говоря уже про cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n;

Строка «item %1 of %2» может превратиться в строку «%2 %1 jskj rgfgfd fv dfvdv»

Поэтому и должно быть полное разделение задачи перевода строк и задачи вводы-вывода.

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

Поэтому и должно быть полное разделение задачи перевода строк и задачи вводы-вывода.

что опять же я в своем примере и показывал, на что JackyTreehorn мне сказал - что:

cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n << endl;

это верх удобства, а я быдлокодер, т.к. это не понимаю :)

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

Ты тролль-быдлокодер ;) Чтобы тебя утешить, я признаю, что твой вариант в этом случае более удобный, краткий и все такое.

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

> Ты тролль-быдлокодер ;) Чтобы тебя утешить, я признаю, что твой вариант в этом случае более удобный, краткий и все такое.

я аж боюсь предположить, какой уровень надо иметь, чтоб слить троллю быдлокодеру ;)

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

На некорректный вопрос, некорректный же ответ, лови:

template<typename T> 
class X 
{ 
  T t; 
  Vector v;  
  Quaternion q; 
 
//////////////// 
 void Read(FILE * f) 
  { 
    t.Read(f);
    v.Read(f);
    q.Read(f);
  } 
  void Write(FILE * f) 
  { 
    t.Write(f);
    v.Write(f);
    q.Write(f);
  } 
};

кстати хочу увидеть ответ вот на это [Срач]Что вы предпочитаете: fprint или cout ? (комментарий) , а то анонимус позорно слил и не ответил

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

> Где ты увидел слив?

«я признаю, что твой вариант в этом случае более удобный, краткий и все такое.» - так это был сарказм такой? на самом деле ты до сих пор считаешь, что твой вариант лучше, да?

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

Мне приходилось искать ошибки в коде, которые были из-за printf и которые бы никогда не случились с потоками. Так что подвесь себя сам.

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

> Мне приходилось искать ошибки в коде, которые были из-за printf и которые бы никогда не случились с потоками. Так что подвесь себя сам.

а примеры будут?

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

> Ты путаешь char* с const char*.

Ну ок, тогда покажи ты, _ГДЕ_ будет утечка. )))

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

Там же, где и в исходном примере показаны «преимущества» потоков перед printf'ом, то есть нигде. А вот недостаток, который несет эта мнимая «простота» потоков я привел.

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

Все ошибки выявляет компилятор. Нет возможности вывести в поток- не будет откомпилирована программа. А с printf всё будет известно только в процессе работы программы.

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

Reset как минимум не утверждал, что так лучше - он просто не ответил на вопрос

//fixed

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

А с printf всё будет известно только в процессе работы программы.

 
double d;
printf( "%d%d", d );

ну не совсем так, вот ругательства на такой код в VC2010:

Non-integer passed as parameter '2' when integer is required in call to 'printf': if a pointer value is being passed, %p should be used

Missing integer argument to 'printf' that corresponds to conversion specifier '2'

Using uninitialized memory 'd': Lines: 6, 7

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

правильно, потому что компилятор просто щаставили изучать строку формата, чтобы было меньше ошибок. Хоть это и не дело компилятора абсолютно. К синтаксису языка это не имеет отношения. И если это скрыть в функции-посреднике, то компилятор ничего не сможет сказать.

anonymous
()

http://www.cprogramming.com/faq/cgi-bin/smartfaq.cgi?answer=1047588900&id=1043284376

printf is a function that takes a variable number of arguments, the first argument being a format string explaining how to treat further arguments. cout is an object of the std::ostream class. The two are completely different in form, yet the result is the same, data sent to stdout.

This question is difficult to answer completely as often phrased since cout and printf are wildly different, but most often one of three questions are meant:

    * Q: "Which is faster?" A: printf, but the difference is too slight to worry about.

    * Q: "Which is better?" A: Neither, it depends heavily on personal preference and what needs to be done.

    * Q: "Which should I use?" A: You should use whichever you feel most comfortable with.


It is preferred that you use iostreams with C++ instead of the C functions because iostreams are type safe and extensible for user defined types, both of which are very good reasons.
anonymous
()
Ответ на: комментарий от lester

надо внести в faq, для пресечения дальнейших холиваров

shty ★★★★★
()

http://www.boost.org/doc/libs/1_42_0/libs/format/index.html Это также и решает ранее упомянутую задачу с переводом на другие языки, когда может быть другая последовательность аргументов. printf на это не способен. А Boost Format такое может, так как лишь обращается по номерам в строке форматирования.

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

> Это также и решает ранее упомянутую задачу с переводом на другие языки, когда может быть другая последовательность аргументов. printf на это не способен

в данном случае конечно format лучше всех, но у него не преимущества предыдущих решений - они работают «из коробки» и не создают дополнительных завязок

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

>ну зачем ты опять этот ущербный faq тащишь сюда???

Есть чего возразить по поводу поинта по ссылке? Нет? Ну и молчи.

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

>ну зачем ты опять этот ущербный faq тащишь сюда???

Есть чего возразить по поводу поинта по ссылке?

да было б чему там возражать - то лузеры вайнят что кактус горький, ты лучше не ориентируйся на неосиляторов (козлёночком станешь), а читай как делают профессионалы

если ты не осилил ссылки на apachedev вот тебе туториал попроще

после того как осилишь разрешаю посмотреть ссылку на apachedev, которую тебе уже давали

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

Я же сказал, что на некорректный вопрос некорректный ответ. Поставь X<double>x и твое «решение» тоже отсосет.

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

> gettext работает из коробки?

причем тут gettext? кроме того, что он к форматированию не относится - пользуются не только им

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

> Это у тебя в песочнице, а у меня в real world legacy program стек был порублен.

просто ты идиот, который не пользуется нормальными решениями и пишет корявый и падучий код

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

Страшный тоже ;)

вовсе и не страшный, просто язык сравнительного низкого уровня и программировать на нём - не клопов давить, требует определённой квалификации от программиста, да

это тот же случай когда человек пописал код на Qt и считает что он профессионал в С++, а это далеко не так

shty ★★★★★
()

предлагаю всем участникам этого срача опознать себя по вот этой табличке программистской некомпетентности. прям как с этого треда рисовали, честное слово

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