Макрос выделен как ключевое слово: паскаль - PullRequest
3 голосов
/ 18 сентября 2011

Просматривая пример кода для FunkyOverlayWindow , я только что нашел довольно интересное объявление:

pascal OSStatus MyHotKeyHandler(
    EventHandlerCallRef nextHandler,
    EventRef theEvent,
    void *userData
);

Здесь pascal выделяется как ключевое слово (розовый в стандартной цветовой схеме Xcode). Но я только что обнаружил, что это макрос, достаточно интересно определенный в файле CarbonCore / ConditionalMacros.h как:

#define pascal

Так, что (или должно было) это сделать? Может быть, это было какое-то специальное использование в прошлом?

Хотя это обсуждение может не подходить здесь, было бы интересно узнать, почему Apple все еще использует Carbon, если это относится к ответу. У меня нет опыта работы с Carbon, но этот код, по-видимому, устанавливает обработчик событий клавиатуры, что заставляет меня задуматься, есть ли какие-то преимущества по сравнению с подходом Cocoa. Не удастся ли когда-нибудь полностью удалить углерод?

Ответы [ 2 ]

7 голосов
/ 18 сентября 2011

В среде исполнения 68k Classic Mac OS (например, до PowerPC или x86) C и Pascal использовали разные соглашения о вызовах, поэтому приложения C должны были объявить соответствующее соглашение при обращении к библиотекам с использованием соглашений Pascal(включая большую часть операционной системы).Макрос был реализован в современных компиляторах (например, MPW, Metrowerks, Think C).

Во всех более новых средах выполнения и во всех современных компиляторах ключевое слово больше не распознается, поэтому заголовок ConditionalMacros.h определяет егодалеко.В этом файле есть несколько комментариев, которые могут помочь объяснить немного больше - прочитайте его, если вы игра.

4 голосов
/ 18 сентября 2011

Вы столкнулись с соглашением о вызовах .

Соглашение о вызовах паскаля для x86: , описанное здесь .

Очень интересно, чтоэто было определено как пустое место, что, как вы заметили, означает, что оно больше не используется.В старые времена в x86-land, особенно в API-интерфейсах Microsoft Windows, это было обычным делом из-за способности процессора удалять параметры из стека в конце вызова с помощью специальной инструкции RET n.Функции с соглашением о вызовах паскаля иногда были выгодны, потому что вызывающий не настраивал подробно на указатель стека после каждого вызова.

Если кто-то с большим знанием , почему макрос все еще существует вкодовая база, но она определена, придет и даст вам лучший ответ, я с удовольствием отзову этот.

...