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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зачем использовать старый синтаксис? 
:(
    Опции темы
and277
Дата 10.4.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
pan2004
Дата 10.4.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 9



Цитата(and277 @  10.4.2009,  18:38 Найти цитируемый пост)
Какое преимущество они дают по сравнению с новым стилем без.h

Никакого. Более того - на современных компиляторах они не работают.
Но до сих пор народ пользуется такими компиляторами как VS6, Borland C++3.1, которые ничего не знают о новых заголовках.

Кроме того, есть C а есть C++. В первом используются и scanf и printf.


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
zim22
Дата 10.4.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

Репутация: 29
Всего: 69



Цитата(and277 @  10.4.2009,  18:38 Найти цитируемый пост)
Возможно полностью отказаться от scanf(), printf() ?

Гугл рекомендует использовать потоки (std::cin, std::cout) только для логирования. Для всего остального желательно использовать printf, scanf
http://google-styleguide.googlecode.com/sv...ide.xml#Streams




--------------------
PM MAIL   Вверх
UnrealMan
Дата 10.4.2009, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 32



Цитата(zim22 @  10.4.2009,  18:58 Найти цитируемый пост)
Гугл рекомендует использовать потоки (std::cin, std::cout) только для логирования. Для всего остального желательно использовать printf, scanf

Гугл вообще очень много сомнительных подходов рекомендует использовать.

Это сообщение отредактировал(а) UnrealMan - 10.4.2009, 19:09
PM MAIL   Вверх
GoldFinch
Дата 10.4.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 6
Всего: 26



printf более читабелен чем std::cout , впрочем для реверсера тоже
PM MAIL ICQ   Вверх
zim22
Дата 10.4.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

Репутация: 29
Всего: 69



Цитата(UnrealMan @  10.4.2009,  19:08 Найти цитируемый пост)
Гугл вообще очень много сомнительных подходов рекомендует использовать.

касательно потоков я уже не в одном месте встречаю нарекание о том, что они будут выводить, чего программист не хотел:

Пример из журнала Overload 89. Там автор рекламирует свою библиотеку форматирования  FastFormat smile
Код
wchar_t const* name = L"The Thing";
  int            mass = 200;
  
  std::cout << "name=" << name << ",
     mass=" << mass  << "kg" << std::endl;


выведет:  name=001237f0, mass=200kg

Это сообщение отредактировал(а) zim22 - 10.4.2009, 19:22


--------------------
PM MAIL   Вверх
azesmcar
Дата 10.4.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



zim22
для вывода wchar_t существует std::wcout

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

Это сообщение отредактировал(а) azesmcar - 10.4.2009, 19:41
PM   Вверх
and277
Дата 10.4.2009, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: нет
Всего: нет



Спасибо за ответы. НО:
zim22, что Есть логирование в твоем понимание?
GoldFinch, а что за "реверсер"?     


PM MAIL   Вверх
zim22
Дата 10.4.2009, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

Репутация: 29
Всего: 69



Цитата(and277 @  10.4.2009,  19:25 Найти цитируемый пост)
что Есть логирование в твоем понимание?

вывод текста на устройство вывода  smile 



--------------------
PM MAIL   Вверх
Dem_max
Дата 10.4.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 4
Всего: 39



вот 2 строки выводят практически одно и тоже
Код

wsprintf(str_hex, "0x%04X ", int_hex);
static_cast<std::ostringstream&>(std::ostringstream() << std::hex << std::setiosflags(std::ios::uppercase | std::ios::showbase) << std::setfill('0') << std::setw(6) << std::internal << aNumber).str();

какую из строчек вы выберете для написания в свое йпроге ?

Это сообщение отредактировал(а) Dem_max - 10.4.2009, 19:31


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
and277
Дата 10.4.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: нет
Всего: нет



Цитата(Dem_max @ 10.4.2009,  19:30)
вот 2 строки выводят практически одно и тоже
Код

wsprintf(str_hex, "0x%04X ", int_hex);
static_cast<std::ostringstream&>(std::ostringstream() << std::hex << std::setiosflags(std::ios::uppercase | std::ios::showbase) << std::setfill('0') << std::setw(6) << std::internal << aNumber).str();

какую из строчек вы выберете для написания в свое йпроге ?

Выберу - 1ое. smile 

Всем спасибо за ваши ответы.
Вообщем я сделал вывод - cin  и cout  - не панацея. Нужно использовать и sprintf() и printf() и тд исходя из конкретной задачи.

 

Это сообщение отредактировал(а) and277 - 10.4.2009, 19:47
PM MAIL   Вверх
azesmcar
Дата 10.4.2009, 19:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Dem_max да вы извращенец..printf тоже можно так написать чтоб от него тошнило smile

Код

stream << ("0x") << hex << uppercase << setfill('0') << setw(4) << int_hex;


Dem_max,
вот этого вполне достаточно smile 

Это сообщение отредактировал(а) azesmcar - 10.4.2009, 19:59
PM   Вверх
zim22
Дата 10.4.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

Репутация: 29
Всего: 69



если std:: убрать, то покрасивше смотрится:
Код
std::ostringstream ws;
  ws << hex << uppercase << showbase << setfill('0')  
     << setw(6) << internal << aNumber;
  std::string s = ws.str();




--------------------
PM MAIL   Вверх
Lazin
Дата 10.4.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



главный недостаток printf и scanf - это то, что они не проверяются компилятором, можно случайно ошибиться в порядке или количестве аргументов и программа упадет или испортит память, еще некоторые любят делать так
Код

char* msg = ...//берем данные из файла, от пользователя или получаем по сети
....
printf(msg);
библиотека iostream таких недостатков лишена
к тому-же типы данных, которые она может выводить не ограничены небольшим набором POD типов данных, можно реализовать операторы << и >> для своих классов и выводить с их помощью данные в файл, в консоль итд

Добавлено через 3 минуты и 6 секунд
если не нравится как выглядит код, использующий потоки, можно использовать библиотеку boost::format
Код

cout << format("writing %s,  x=%s : %d-th step \n") % "toto" % 40.23 % 50;

PM MAIL Skype GTalk   Вверх
UnrealMan
Дата 10.4.2009, 20:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 32



Цитата(zim22 @  10.4.2009,  19:19 Найти цитируемый пост)
касательно потоков я уже не в одном месте встречаю нарекание о том, что они будут выводить, чего программист не хотел

Можно подумать,

Код
std::printf("name=%s, mass=%dkg", name, mass);

выведет то, что хотел программист smile

А как тебе вот такая ошибочка?

Код
void f(std::size_t n, const char *s)
{
    std::printf("%d%s", n, s);
}

Сколько радости будет при переносе корректно работающей программы на 64-битную платформу smile

Цитата(Dem_max @  10.4.2009,  19:30 Найти цитируемый пост)
какую из строчек вы выберете для написания в свое йпроге ?

wsprintf - нестандартная функция. Вместо того чтобы тупо копировать код с другого форума, лучше бы подумал, что именно делается в каждом случае.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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