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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> тип параметров в функции 
:(
    Опции темы
Mormishka
Дата 19.4.2011, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Есть ли возможность как не писать несколько раз тип данных в функции 
void f(double x1,double x2)

PM MAIL   Вверх
asmdzen
Дата 19.4.2011, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


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

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



Mormishka, template?
PM MAIL   Вверх
borisbn
Дата 19.4.2011, 21:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Mormishka, более 4-х параметров - правило плохого тона, а 3-4 раза повторить в описании и потом сказать IDE - сделай имплементацию - влом?
Или интересуют возможности стандарта? Если второе - то не проще ли почитать сам стандарт?
Там всё сказано, причём однозначно. Не то, что здесь на форуме "собирать мнения"...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 19.4.2011, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Mormishka, нет нельзя. Сколько параметров, столько и типов. Тем более что, как заметил borisbn, более 4-х параметров - признак плохого тона или ошибки дизайна. Так что, от пары повторений ты не умрешь.
PM   Вверх
bems
Дата 19.4.2011, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Цитата(borisbn @  19.4.2011,  21:25 Найти цитируемый пост)
более 4-х параметров - правило плохого тона
а мне всегда нравилась CreateProcess  smile 



--------------------
Обижено школьников: 8
PM MAIL   Вверх
bsa
Дата 19.4.2011, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bems @  19.4.2011,  22:38 Найти цитируемый пост)
а мне всегда нравилась CreateProcess

WinAPI - самый достойный (из известных мне) пример ужасного дизайна. И функции выполняющие не то, что следует из их названия (CreateFile, ClearCommError, ...) и миллион параметров у функций, когда большинство из них мало кем используются, выполнение большого спектра задач одной функцией...
PM   Вверх
bems
Дата 19.4.2011, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



bsa, не понял, CreateFile не создаёт объект ядра файл? А что же она тогда делает?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
volatile
Дата 20.4.2011, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bems @  19.4.2011,  23:20 Найти цитируемый пост)
CreateFile не создаёт объект ядра файл? А что же она тогда делает? 

она много чего делает. Например:
Код

hconsole = CreateFile(_T("CONOUT$"),GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);

получает хендл текущей стандартной консоли (кстати вполне легальный код).

с названием "СоздатьФайл" как-то не вяжется, не правда-ли?
PM MAIL   Вверх
boostcoder
Дата 20.4.2011, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



bems, 
Цитата

The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe.

PM WWW   Вверх
bems
Дата 20.4.2011, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Цитата(volatile @  20.4.2011,  00:01 Найти цитируемый пост)
с названием "СоздатьФайл" как-то не вяжется, не правда-ли? 
отлично вяжется. консольный хендл ведет на file object. Как и всякие пайпы и девайсы.
Вы просто не умеете это готовить smile

Добавлено @ 00:24
Может это новость, скажу на всякий случай. Этот хендл можно и читать/писать функциями ReadFile/WriteFile. чтобы программа получившая файловый хендл стандартного вывода (например) не обязана была думать что там - файл на диске, консоль или пайп, созданный другой программой.

Это сообщение отредактировал(а) bems - 20.4.2011, 00:24


--------------------
Обижено школьников: 8
PM MAIL   Вверх
volatile
Дата 20.4.2011, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bems @  20.4.2011,  00:15 Найти цитируемый пост)
Вы просто не умеете это готовить 

с чего вы решили что "не умеете"? smile 

еще один пример, из текущего проекта. Изменение даты модификации существующего файла
Код

   HANDLE hfile = CreateFile( filename.c_str(), FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0 );
   if (hfile != INVALID_HANDLE_VALUE)
      ret = SetFileTime( hfile, &ft, &ft, &ft);

При чём здесь слово Create ?
PM MAIL   Вверх
bems
Дата 20.4.2011, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



к тому, что создаёт файловый объект. То что ты говоришь смахивает на претензию к оператору new за то что он открывает файл, а не создаёт новый (когда применяется с каким-нить классом "файл", открывающим файл в конструкторе)


--------------------
Обижено школьников: 8
PM MAIL   Вверх
volatile
Дата 20.4.2011, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



bems, Это спор ниочем. Кому-то нравится, кому-то нет...
мне лично пофиг, я уже привык.

PM MAIL   Вверх
bems
Дата 20.4.2011, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Нет, это очень предметный спор. Название функи в точности соответствует тому что она делает
CreateMutex
CreateThread
CreateEvent
CreateFile
CreateProcess
CreateFileMapping

Апи очень последователен: есть объект ядра, значит есть функция, где первое слово Create, а дальше - название объекта


--------------------
Обижено школьников: 8
PM MAIL   Вверх
volatile
Дата 20.4.2011, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Кстати создать файл smile текущей консоли можно и по другому
Код

hconsole = GetStdHandle( STD_OUTPUT_HANDLE )

Как-то без слова Create теперь даже не воспринимается  smile 
PM MAIL   Вверх
bems
Дата 20.4.2011, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



В общем случае это разные хендлы. Если стандартный вывод перенаправлен, то CreateFile("CONOUT$" возвращает не то, что GetStdHandle

Добавлено через 9 минут и 41 секунду
Цитата(bems @  20.4.2011,  00:58 Найти цитируемый пост)
В общем случае это разные хендлы

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


--------------------
Обижено школьников: 8
PM MAIL   Вверх
xvr
Дата 20.4.2011, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(bems @  20.4.2011,  00:43 Найти цитируемый пост)
Апи очень последователен: есть объект ядра, значит есть функция, где первое слово Create, а дальше - название объекта 

Не хватает еще одного слова -
Цитата

CreateMutexObject
CreateThreadObject
CreateEventObject
CreateFileObject
CreateProcessObject
CreateFileMappingObject
вот теперь 'последователен'. Согласитесь, что File и FileObject - это несколько разные сущности  smile 

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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Ну ты программист или куда? Конечно ж объект, потому что всё суть объекты


--------------------
Обижено школьников: 8
PM MAIL   Вверх
bsa
Дата 20.4.2011, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



bems, вот цитата из документации на CreateFile:
Цитата
Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. The function returns a handle that can be used to access the file or device for various types of I/O depending on the file or device and the flags and attributes specified.
Где ты тут видишь упоминание о "объекте ядра"? Нет такого! Я конечно рад за разработчиков API, которые создавали его для себя. Но я, как пользователь, чувствую себя не комфортно от того, что функции делают не то, что следует из их названия.
Согласись, прикладному программисту должно быть глубоко фиолетово от того, что происходит внутри системы. Он захотел открыть файл, файл открылся. А то, что система для этого сделала миллион операций, его волновать вообще не должно.
PM   Вверх
bems
Дата 20.4.2011, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Цитата(bsa @  20.4.2011,  16:31 Найти цитируемый пост)
Где ты тут видишь упоминание о "объекте ядра"? Нет такого!
А вот описалово писали уже для таких как ты, которые за деревьями леса не видят. Пришлось перечислить всякие file, file stream, directory, physical disk и тд.
Также для детей природы есть такой топик http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx

Цитата(bsa @  20.4.2011,  16:31 Найти цитируемый пост)
Но я, как пользователь, чувствую себя не комфортно от того, что функции делают не то, что следует из их названия.
Согласись, прикладному программисту должно быть глубоко фиолетово от того, что происходит внутри системы
Люди, которым фиолетово работают в бухгалтерии. Им действительно не нужно знать что такое логарифм, чтобы считать сложные проценты.


Это сообщение отредактировал(а) bems - 20.4.2011, 18:46


--------------------
Обижено школьников: 8
PM MAIL   Вверх
xvr
Дата 20.4.2011, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Ну если подходить ко всему с точки зрения ядра, то Mutex надо было назвать Mutant. Ибо в ядре он именно так называется  smile 

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


Эксперт
****


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

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



Цитата(bems @ 20.4.2011,  18:46)
Цитата(bsa @  20.4.2011,  16:31 Найти цитируемый пост)
Где ты тут видишь упоминание о "объекте ядра"? Нет такого!
А вот описалово писали уже для таких как ты, которые за деревьями леса не видят. Пришлось перечислить всякие file, file stream, directory, physical disk и тд.
Также для детей природы есть такой топик http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx

Цитата(bsa @  20.4.2011,  16:31 Найти цитируемый пост)
Но я, как пользователь, чувствую себя не комфортно от того, что функции делают не то, что следует из их названия.
Согласись, прикладному программисту должно быть глубоко фиолетово от того, что происходит внутри системы
Люди, которым фиолетово работают в бухгалтерии. Им действительно не нужно знать что такое логарифм, чтобы считать сложные проценты.

Т.е. ты считаешь, что для того, чтобы работать таксистом, необходимо не только уметь хорошо водить машину и знать местность, но и понимать алгоритмы работы прошивки микроконтроллера двигателя, а так же знать в каком контуре повысится давление при нажатии вон на ту кнопку?
Лично я считаю, что системным программистам одно, прикладным другое, а вэб-дизайнерам третье. И незачем все смешивать в одну кучу. Система очень сложная, и, если отвлекаться на внутреннее устройство ядра системы, можно не сделать свою работу в срок.

Если ты считаешь, что в документации пользователя нужно оперировать терминами внутреннего устройства девайса - это твое право. Только имей в виду, что ты можешь заблуждаться. Я, например, считаю, что в документации должно быть в первую очередь написано то, что я получу на выходе при подаче чего-то на вход.
А названия функций - это краткое описание. Если ты не знаешь WinAPI, то для того, чтобы понять код, нужно вдумчиво читать документацию на каждую встречную функцию.

Еще пример. Мне нужна работа с СОМ портом. В частности, узнать, сколько байт во входном и выходном буферах. Так вот, ни одна функция, отвечающая за получение информации не позволяет это получить. Зато есть магическая функция ClearCommError, которая кроме того, что сбрасывает флаги ошибок порта (ну в принципе следует из ее названия), еще и позволяет получить определенную информацию о состоянии порта. Догадаться не используя поиск по примерам и не перечитывая все описания НЕВОЗМОЖНО!
PM   Вверх
bems
Дата 21.4.2011, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Цитата(xvr @  20.4.2011,  19:59 Найти цитируемый пост)
Ну если подходить ко всему с точки зрения ядра, то Mutex надо было назвать Mutant. Ибо в ядре он именно так называется
Во-первых KMUTANT и KMUTEX синонимы, и строго ядерные (не винапи) функции для манипуляции с ним часто ссылаются на него как на мютекс, например KeInitializeMutex, так что тут скорее просто два названия
Во-вторых понятие "объект ядра" вводится именно в винапи, прикладному коду не нужно знать подробностей, но примерное представление имень необходимо.

Цитата(bsa @  20.4.2011,  20:18 Найти цитируемый пост)
Т.е. ты считаешь, что для того, чтобы работать таксистом, необходимо не только уметь хорошо водить машину и знать местность, но и понимать алгоритмы работы прошивки микроконтроллера двигателя, а так же знать в каком контуре повысится давление при нажатии вон на ту кнопку?
нет, таксисту не надо. но ты не таксист, ты программист, это инженерная специальность. А веб-программистам нужно знать веб-сервер, даже если по началу сначала кажется что "я нажимаю кнопочку и это работает"

Цитата(bsa @  20.4.2011,  20:18 Найти цитируемый пост)
Система очень сложная, и, если отвлекаться на внутреннее устройство ядра системы, можно не сделать свою работу в срок.
Внутренне устройство - дело другое. Тебя же никто не заставляет работать со структурой FILE_OBJECT напрямую, но что есть объект файл, что он представлен для тебя хендлом, что объект reference-counted, и счетчик ссылок уменьшается вызовом CloseHandle ты знать обязан, если хочешь использовать апи

Цитата(bsa @  20.4.2011,  20:18 Найти цитируемый пост)
ще пример. Мне нужна работа с СОМ портом

Когда ты используя CreateFile открываешь ком-порт, то получаешь хендл на реальный FILE_OBJECT, обслуживаемый соответствующим драйвером. Но файловый объект он больше для поточного обмена данными, а драйвероспецифичные вещи всю жизнь делались посылкой драйверу ioctl. И это есть в msdn, да. в этом случае указывается тот же хендл файлового объенкта, но он служит скорее неким ключем у нужному DEVICE_OBJECT. 
Исходя их этого, уж не является ли тем несуществующим способом, о котором ты говоришь вызов DeviceIoControl с кодом IOCTL_SERIAL_GET_COMMSTATUS? 
кстати эта штука тоже заодно сбрасывает флаги. Если поведение драйвера делает из этих вещей одну цельную операцию, то не удивительно что разработчики апи сделали это одним вызовом.

Это сообщение отредактировал(а) bems - 21.4.2011, 00:21


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

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

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

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

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


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

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


 




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


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

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