Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> printf в программе на С++ 
:(
    Опции темы
ZZZkoderZZZ
Дата 12.3.2013, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.3.2013




Вот тут шло обсуждение
http://forum.vingrad.ru/topic-98098.html#st_15_view_0
Вроде как в книгах пишут, что в С++ нельзя использовать printf
Цитата

Для чего и почему использую функции и С. К примеру, printf.
Если в С++ нуно использовать функцию cout. В одной из книги
было написано, что эта функция усовершенствованная printf.

Так можно или нет использовать printf в программе на С++ ? 
PM MAIL   Вверх
sergioK1
Дата 12.3.2013, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011




Цитата(ZZZkoderZZZ @ 12.3.2013,  09:14)
Вот тут шло обсуждение
http://forum.vingrad.ru/topic-98098.html#st_15_view_0
Вроде как в книгах пишут, что в С++ нельзя использовать printf
Цитата

Для чего и почему использую функции и С. К примеру, printf.
Если в С++ нуно использовать функцию cout. В одной из книги
было написано, что эта функция усовершенствованная printf.

Так можно или нет использовать printf в программе на С++ ?

Нельзя это крайность,   С++ поддерживает функции С, и добавляет свои,
есть масса причин использовать с функции и другая масса причин не использовать,
Однозначного ответа тут нет ,  а холиварить лень  smile  
 
PM MAIL   Вверх
bsa
Дата 12.3.2013, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия




Главный недостаток printf заключен в том, что она не проверяет свои аргументы. В итоге, из-за небольшой ошибки у тебя на x86 будет все хорошо, а на ARM или x86_64 вылезут косяки. Или после изменения типа переменной у тебя перестанет корректно работать этот printf... И ладно если это сразу выводится на экран. А если это случается очень редко, и не для вывода на экран, а для передачи по сети информации банку о списании средств?..
В отличие от printf потоки в С++ подстраиваются под параметры, поэтому многих проблем благодаря им можно избежать.
Любители printf могут в С++ использовать boost::format, имеющий похожий синтаксис. А у использующих Qt есть еще более удобный инструментарий - QString::arg.
PM   Вверх
ZZZkoderZZZ
Дата 12.3.2013, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.3.2013




Вообще говоря, printf часто намного удобнее cout, хотя это и не ООП.

Добавлено @ 15:04
Цитата(bsa @ 12.3.2013,  15:00)
для передачи по сети информации

Как использовать printf для передачи по сети информации?

Добавлено @ 15:12
Цитата(bsa @ 12.3.2013,  15:00)
А если это случается очень редко

Значит с printf ошибка будет замечена рано или поздно, а с cout не будет. Что хорошего в том, что функция скрывает ошибки?

Это сообщение отредактировал(а) ZZZkoderZZZ - 12.3.2013, 15:13
PM MAIL   Вверх
bsa
Дата 12.3.2013, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия




Цитата(ZZZkoderZZZ @  12.3.2013,  16:03 Найти цитируемый пост)
Как использовать printf для передачи по сети информации?
про перенаправление потоков слышал? А потом, кроме printf есть еще fprintf и sprintf.


Цитата(ZZZkoderZZZ @  12.3.2013,  16:03 Найти цитируемый пост)
Значит с printf ошибка будет замечена рано или поздно, а с cout не будет. Что хорошего в том, что функция скрывает ошибки?
А с чего ты взял, что в случае с cout это будет ошибкой?
Подумай хорошенько, что будет в обоих случаях, если ты поменяешь тип переменной с short на long. И с int на MyBigInt.
PM   Вверх
ZZZkoderZZZ
Дата 12.3.2013, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.3.2013




Есть подозрение, что MyBigInt не выведется правильно ни с помощью printf ни с помощью cout.
PM MAIL   Вверх
baldina
Дата 12.3.2013, 19:35 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва




подозрение неверно.
printf в принципе предназначен для определенного перечня типов - встроенных
потоки C++ могут быть адаптированы к любому типу, нужно написать функцию
Код

std::ostream& operator<<(std::ostream& os, const MyBigInt& value);

часто для этого необязательно иметь исходники класса
PM MAIL   Вверх
bsa
Дата 12.3.2013, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия




ZZZkoderZZZ, в случае с printf у тебя все скомпилируется, но работать будет некорректно. А в случае с cout - или не скомпилируется, или работать будет корректно (если конечно, ты не определил оператор вывода в поток, делающим что-то некорректное).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт.


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Флейм | Следующая тема »


 




[ Время генерации скрипта: 0.0837 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.