![]() |
|
Модераторы: bsa |
![]()
|
|
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Читаю форум... И часто вижу в листингах старый стиль зоголовков типа
#include <stdio.h> #include <conio.h> #include <iostream.h> Какое преимущество они дают по сравнению с новым стилем без.h? Ведь новый стандарт кажется считает их устаревшими. Поправьте если я не прав... Также заметил, что в новых учебниках практически нету примеров конструкций ввода вывода - scanf(), printf() и тд. Одни cout << и cin >>. А на форуме засилие scanf() и printf(). Есть ли те задачи которые не возможно решить одними cout и cin + флаги форматирования и тд. Возможно полностью отказаться от scanf(), printf() ? Это сообщение отредактировал(а) and277 - 10.4.2009, 18:41 |
|||
|
||||
| pan2004 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 2 Всего: 9 |
Никакого. Более того - на современных компиляторах они не работают. Но до сих пор народ пользуется такими компиляторами как VS6, Borland C++3.1, которые ничего не знают о новых заголовках. Кроме того, есть C а есть C++. В первом используются и scanf и printf. |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Гугл рекомендует использовать потоки (std::cin, std::cout) только для логирования. Для всего остального желательно использовать printf, scanf http://google-styleguide.googlecode.com/sv...ide.xml#Streams |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 5 Всего: 32 |
Гугл вообще очень много сомнительных подходов рекомендует использовать. Это сообщение отредактировал(а) UnrealMan - 10.4.2009, 19:09 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
printf более читабелен чем std::cout , впрочем для реверсера тоже
|
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
касательно потоков я уже не в одном месте встречаю нарекание о том, что они будут выводить, чего программист не хотел: Пример из журнала Overload 89. Там автор рекламирует свою библиотеку форматирования FastFormat
выведет: name=001237f0, mass=200kg Это сообщение отредактировал(а) zim22 - 10.4.2009, 19:22 |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
zim22
для вывода wchar_t существует std::wcout не знаю с чего гугл взял что printf, scanf лучше - но есть более авторитетные источники утверждающие обратное и я с ними полностью согласен. Это сообщение отредактировал(а) azesmcar - 10.4.2009, 19:41 |
|||
|
||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Спасибо за ответы. НО:
zim22, что Есть логирование в твоем понимание? GoldFinch, а что за "реверсер"? |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
вывод текста на устройство вывода |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
вот 2 строки выводят практически одно и тоже
какую из строчек вы выберете для написания в свое йпроге ? Это сообщение отредактировал(а) Dem_max - 10.4.2009, 19:31 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| and277 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Выберу - 1ое. Всем спасибо за ваши ответы. Вообщем я сделал вывод - cin и cout - не панацея. Нужно использовать и sprintf() и printf() и тд исходя из конкретной задачи. Это сообщение отредактировал(а) and277 - 10.4.2009, 19:47 |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Dem_max да вы извращенец..printf тоже можно так написать чтоб от него тошнило
Dem_max, вот этого вполне достаточно Это сообщение отредактировал(а) azesmcar - 10.4.2009, 19:59 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
если std:: убрать, то покрасивше смотрится:
|
|||
|
||||
| Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
главный недостаток printf и scanf - это то, что они не проверяются компилятором, можно случайно ошибиться в порядке или количестве аргументов и программа упадет или испортит память, еще некоторые любят делать так
к тому-же типы данных, которые она может выводить не ограничены небольшим набором POD типов данных, можно реализовать операторы << и >> для своих классов и выводить с их помощью данные в файл, в консоль итд Добавлено через 3 минуты и 6 секунд если не нравится как выглядит код, использующий потоки, можно использовать библиотеку boost::format
|
||||
|
|||||
| UnrealMan |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 5 Всего: 32 |
Можно подумать,
выведет то, что хотел программист А как тебе вот такая ошибочка?
Сколько радости будет при переносе корректно работающей программы на 64-битную платформу wsprintf - нестандартная функция. Вместо того чтобы тупо копировать код с другого форума, лучше бы подумал, что именно делается в каждом случае. |
||||||
|
|||||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
оно type safe
|
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
Почитайте книгу Скотта Майерса "Эффективное использование C++" и у Вас отпадёт желание использовать сишный синтаксис вообще. Давайте будим прогрессивными и будим различать Си и C++.
-------------------- ![]() |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
| Cheloveck |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
а с каких пор winapi стали стандартными? =) Добавлено через 10 минут и 29 секунд
во извращение =)
не катит уже? -------------------- ![]() |
||||||
|
|||||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
lol в user32.dll много разных функций, и что, все они имеют какое-то отношение к стандарту языка? |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Речь шла о стандартных функциях С++, а так конечно функция "zuzu" из библиотеки "matumba" написанной Васей Пупкиным на первом курсе канализационного факультета университета водопроводчиков - вполне стандартна для этой библиотеки.
не всегда, иногда нужно отформатировать строку по конкретному формату. Например если вам понадобится хранить формат в конфигурационном файле и форматировать в соответствии с ним. Это сообщение отредактировал(а) azesmcar - 10.4.2009, 22:39 |
||||
|
|||||
| Cheloveck |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
во извращение =)
не катит уже? -------------------- ![]() |
||||
|
|||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
монгим нравится printf-like синтаксис, он часто встречается в документации, он зачастую удобнее чем iostream, это своеобразный DSL для описания форматирования, одним словом - lingua franca boost::format совместим с printf и может его заменить, но при этом он безопасен Это сообщение отредактировал(а) Lazin - 10.4.2009, 22:55 |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
+ к этому хочу добавить, что Borland C++ Builder 6 довольно популярен, а там как раз все по-старому... сведения о популярности я взял с винграда (проводился тут опрос и шестерка лидировала среди остальных), про популярность в сравнении с VS, CodeBlocks и др. я не говорил, а то сейчас начнется -------------------- |
|||
|
||||
| sdukshis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
По моему мнению главная проблема printf() и scanf() это не безопасность типов (надо самому смотреть, что пишешь), а именно невозможность расширить функционал на свои собственные классы.
Использование потоков позволяет это сделать легко и очень удобно. Так же, не стоит забывать, что потоки позволяют обрабатывать ошибки с помощью исключений. |
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
почитал.
|
||||
|
|||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
zim22, выходит Майерс и сам до конца не уверен.
А что папа Страуструп пишет про это? |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
zim22,
почему-то я сомневаюсь, что все кругом пишут код, где критична скорость выполнения. Один-два конструктора особо не затормозят. Майерс сделал оговорку, но мог бы и не говорить, тогда бы и никто ничего не узнал, но если читать книгу внимательно, то видно, что он уделяет внимание всем мелочам, а текущая проблема, имхо, мелочь)) Обратите внимание на сабж правила!!! Это сообщение отредактировал(а) Cheloveck - 11.4.2009, 13:07 -------------------- ![]() |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
В оригинале это было не правило:
Т.е. это просто номер пункта. Лично я printf функции не использую. Потоки проще и удобней. Это сообщение отредактировал(а) zim22 - 11.4.2009, 13:29 |
|||
|
||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Я так же не использую. Тем более в новых учебниках их избегают. |
|||
|
||||
| adejneka |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: нет Всего: 11 |
Это недостаток не языка, а отдельных компиляторов: например, GNU C проверяет типы и количество аргументов *printf, *scanf (в том числе у вариантов этих функций, написанных пользователем - при использовании нестандартных деклараций), если строка формата известна на этапе компиляции. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |