![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Hagrael |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 26.6.2011 Репутация: нет Всего: нет |
Здравствуйте, товарищи программисты. Хотелось бы узнать, пишите ли вы LRESULT или же long; пишите ли вы пустые (насколько я понял) слова вроде CALLBACK? Используете ли венгерскую нотацию? Делаете ли вы все это, программируя под Windows?
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Обычно, программируя под Windows (и не только), мало кто пишет на WinAPI... Так как это трудная, кропотливая и неблагодарная работа. Если же для самоутверждения тебе необходимо это делать, то писать LRESULT и CALLBACK необходимо. Так как никто не застрахован от изменений в будущем.
"Венгерскую нотацию" в том виде, что используется в WinAPI, мало кто считает достойным стилем. |
|||
|
||||
Hagrael |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 26.6.2011 Репутация: нет Всего: нет |
||||
|
||||
spyswamp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Hagrael, значения макросов однажды могут поменять. ;) Вот и думай: писать или нет. Обычно при работе с WinAPI я пишу всю эту муть "на всякий случай".
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
Hagrael |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 26.6.2011 Репутация: нет Всего: нет |
Понятно. Но почему когда я зачеркиваю надпись CALLBACK, выводится такая ошибка:
invalid conversion from 'LRESULT (*)(HWND__*, UINT, UINT, LONG)' to 'LRESULT (*)(HWND__*, UINT, WPARAM, LPARAM)'| Фактически, это ведь тоже самое, что cannot convert from LRESULT to LRESULT o_O |
|||
|
||||
volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Потому что CALLBACK это способ вызова функций. Там параметры передаются не как в С, а наоборот. И еще ряд тонкостей. Поэтому CALLBACK опускать ни в коем случае нельзя. С чего это вы взяли что пустые?
|
||||
|
|||||
Hagrael |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 26.6.2011 Репутация: нет Всего: нет |
А у __stdcall в свою очередь 3 определения. Как такое может быть? Причем второе объявление вызывает функция __attribute__ которая ничего не пишет.
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Не может. __stdcall это зарезервированное слово С/С++ (из расширений MS). Обозначает способ вызова функции (calling convension) Добавлено через 39 секунд А это зарезервированное слово из расширений GCC |
|||
|
||||
Hagrael |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 26.6.2011 Репутация: нет Всего: нет |
Почитал-почитал, и ничего, сказать по правде, не понял. В чем отличие __stdcall функции от обычной?
Можно ли создать свой собственный особый тип функций? |
|||
|
||||
asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
||||
|
||||
Hagrael |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 26.6.2011 Репутация: нет Всего: нет |
asmdzen, понятно. А что по производительности лучше, и где какой вариант применять?
По умолчанию, как я понял, функция становится cdecl? |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Не заморачивайся. По скорости разницы практически нет. Имхо, теоретически, cdecl может быть быстрее. Да. Но многое еще зависит от настроек компилятора. Это сообщение отредактировал(а) bsa - 11.8.2011, 17:22 |
|||
|
||||
Hagrael |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 26.6.2011 Репутация: нет Всего: нет |
Большое спасибо, вопрос решен.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |