Обязательно ли предшествовать функции с CALLBACK, WINAPI или PASCAL (в MFC) или только для удобства чтения? - PullRequest
1 голос
/ 07 марта 2012

В MFC VC++, функция setTimer устанавливается с помощью процедуры CALLBACK. По ссылке я прочитал, что

Функция, помеченная __stdcall, использует стандартный вызов соглашение так названо, потому что все функции Win32 API (за исключением нескольких которые принимают переменные аргументы) используйте его.

И из этого я понял, что ВСЕ ФУНКЦИИ MFC VC ++ ИСПОЛЬЗУЮТ __stdcall в качестве вызывающих преобразований.

А CALLBACK определяется следующим образом ...

 #define CALLBACK __stdcall

Что я прочитал: Предшествующая функция с CALLBACK используется, чтобы подчеркнуть, что определенная функция будет вызываться автоматически при необходимости (как в этом случае setTimer или onClick в javascript),

Я сомневаюсь, , в MFC VC ++ все функции (кроме немногих который принимает переменные аргументы) имеет соглашение о вызовах по умолчанию __stdcall. Следовательно, предшествующий или не предшествующий функции с CALLBACK или WINAPI или PASCAL имеет тот же эффект?

1 Ответ

0 голосов
/ 07 марта 2012

Это абсолютно необходимо для компьютера? Это зависит от контекста. Если вы не соответствуете соглашению о вызовах , вам может повезти, потому что типы данных в стеке соответствуют требованиям API, или он может потерпеть неудачу, если ваш код работает на другой архитектуре как х64 и вылетает каждый раз.

Это абсолютно необходимо для программиста по техническому обслуживанию? Да, это так. Вы знаете, бедный человек, который должен будет выяснить ваши нестандартные соглашения и умные «оптимизации». Когда-нибудь этот бедный человек может быть вами.

Компилятор кричал на вас по причине , когда вы пытались подорвать API.

...