![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
я вижу, ты просто не до конца понял фразы:
синее - ключевое дело не в старости кода на Си, этому языку уже много лет, и его концепции со временем только укрепляются и примеры тому - подавляющее большинство C-подобных инструментов в любой из своих промежуточных версий, майкрософт могли дополнить этот интерфейс более совместимыми аналогами, но не сделали, и это логично: если двигаться всякий раз по указателям одного и того же маршрута, то мы конечно всегда переместимся из пункта А в пункт Б, но если есть другой, более короткий путь, пусть и более грязный, но короткий, есть ли смысл его игнорировать, ведь этот путь со временем расчистят, и расставят новые указатели, потому что всем понятно, что гораздо выгоднее использовать именно его? дело в том, что соблюсти стандарт невозможно из-за того, что интерфейс Get/SetWindowLong - это узкое горлышко, через которое проходит разнородная информация чтобы следовать букве закона, в данном случае потребуется ввести массу специализаций одного метода: GetWindowLong GetWindowVoid GetWindowWndProc GetWindowModule GetWindowID GetWindowMenu и т.п., причем некоторые, на самом деле, так и реализованы, и подозреваю - только для удовлетворения общих правил но что делать с "application-defined value", в таком случае? Шаблонов в API нет до сих пор, и появиться они могут только совместно с их компоновкой в реальном времени , т.е. API должна будет поставляться совместно и со всеми инструментами разработчика, а это просто противоречит ее назначению ps: частные специализации шаблонов я не рассматриваю, при их экспорте - это конечные функции, с заведомо решенными типами данных -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: нет Всего: 59 |
Теперь переместились ближе к виндам Мы уклонились от предмета спора. Get/SetWindowLong не нарушает стандарт С тем, что указатель передается через int32. Ограничивают совместимость, но не более - в висте будет int64. API - это отдельная тема - соглашение о вызовах системы и не более. Попытка привязать прерывания DOS к стандарту ни к чему бы не привела. WinAPI и C++ совершенно разные вещи и требовать от первой поддержки стандарта С++ глупо - это внеязыковая среда. Спор идет о стиле программирования С++, даже если это касается вызовов WinAPI. Цель разработчиков системы предоставить интерфейс для каждого языка, через который можно обращаться к системным функциям. Именно для этого и есть некая библиотека, вызывая функции которой мы обращаемся к API. Задача разработчиков этой библиотеки сделать ее таким образом, чтобы отвечала требованиям языка, к которому она относится. Соответственно появляется файл windows.h, в котром прописаны интерфейсы вызовов. Я всего лишь говорю о том, что программисту С++ не надо по большому счету знать бинарный код вызова - сколько байтов куда и для чего. Он знает хидер, в котором четко прописан прототип, а также у него есть библиотека, которая к хидеру относится. Задача программера - правильно вызвать функцию согласно прототипа. Только и всего. Вот я за это и ратую. И если в хидере написан параметр void* - то не стоит передавать int. Просто выполнять правила и все. Если требуется передать указатель, который к тому же четкого размера - то в хидере указывается dword (заметьте, не int и не long) - т.е. привязка к конкретной платформе, в которой указатель 32 бита и все тут. Жестко. Код С++ (не бинарный, а исходный, разумеется), написанный максимально вежливо - будет максимально быстро переносится на другую платформу вот и все, что я хотел собственно выразить.
Совершенно не нужно, по крайней мере для С++. Это достаточно гибкий язык. Лишнего городить не надо. Давайте подведу резюме, а то наш спор скоро всех смешить начнет. Итак, мое мнение: следует избегать нарушения в типах передаваемых параметров, особенно избегать передавать в указателе какую-либо информацию. Указатель можно передавать в целых типах согласно рекомендациям стандарта. Ваше мнение: если знаешь платформу и четкие размеры передаваемых данных, то можно передавать с преобразованиями - главное чтобы голова знала что делает. (подправьте, если это не так). Оба мнения совершенно разумны и каждый из нас естественно останется при своем. Начинающие программисты, посмотрев наш спор придут к тому или иному мнению и решат для себя лично как им действовать. |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ну, спорить мне тоже уже не интересно,
резюме поддерживаю, и считаю, что аргументы со своей стороны я защитил, учитывая, в каком разделе форума мы находимся -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Ребят Вы тут постоянно упоминиете некий "Стандарт", Я тат понимаю это про описание самого C++. Можно его на русском где-то почитать?
|
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: нет Всего: 59 |
Аналогично. Лучше найдем другую тему для спора.
Почему некий? Есть стандарт ANSI сейчас готовится новый. По сути - арбитр в спорах, хотя достаточно много узких мест и необнозначностей. На русском у меня нет, на английском есть, но неудобный - pdf с защитой. |
||||
|
|||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Anikmar, а вообще на русском его в инете достать можно?
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: нет Всего: 59 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |