Мне было интересно, почему в каком-то исходном коде есть такие макросы, как FAR и PASCAL. Что они означают и делают? Благодаря
Что такое FAR PASCAL?
Ответ 1
-
PASCAL: это связано с соглашение о вызовах. Параметры помещаются в стек в порядке слева направо (напротив cdecl), и вызывающий отвечает за балансировку стека перед возвратом.
Это соглашение о вызовах было распространено в следующих 16-битных API: OS/2 1.x и Microsoft Windows 3.x. Там какой-то спор о том, был ли он использован Borland Delphi 1.x
-
FAR: в сегментированном компьютере архитектуры дальний указатель является указателем, который включает селектор сегмента, что позволяет укажите адреса за пределами текущего сегмента.
Для полноты FAR и PASCAL являются макросами prepreocessor, которые при компиляции для 16-разрядных систем расширяются до ключевых слов, необходимых для объявления соглашения о вызовах и размера указателя. В 32-битных системах они обычно расширяются до нуля (если у вас нет странного соглашения о вызове по умолчанию). Макросы сохраняются для обратной совместимости {hat/tip: комментарий от Адриана Маккарти}
Ответ 2
Идя по памяти здесь,
FAR возвращается к 16-битным дням, когда память кучи была разделена на сегменты. Данные NEAR были ограничены по размеру и быстрее, FAR было больше, но дороже.
Насколько я знаю, на 32-битной земле это макрос, который рушится до нуля.
PASCAL - это соглашение о вызове, которое также используется в течение 16-битных дней. С тех пор он был заменен на stdcall.
Оба варианта оставлены для обратной совместимости.
Ответ 3
FAR устарел; он использовался в 16-битном коде для указания указателей, которые могли бы адресовать все адресное пространство, а не только 16-битное смещение к текущему сегменту.
PASCAL - это соглашение о вызове. Как Wikipedia описывает это:
Параметры помещаются в стек в порядке слева направо (напротив cdecl), и вызывающий отвечает за балансировку стека перед возвратом.
Это соглашение о вызовах было распространено в следующих 16-битных API: OS/2 1.x, Microsoft Windows 3.x и Borland Delphi версии 1.x.
Ответ 4
FAR
является задержкой с 16-разрядной эры, когда у нас были близкие (16-разрядные) и далеко (32-разрядные) указатели.
PASCAL
является соглашением о вызове. Я считаю, что это эквивалентно stdcall
в настоящее время.
Ответ 5
это старый вызов...
FAR наследуется от времени, когда процессор регистрирует, где слишком мал, чтобы удерживать полный адрес назначения перехода. так что процессоры имели 2 типа скачка в зависимости от того, как "далеко" место назначения было от текущего счетчика программ.
PASCAL описывает порядок аргументов в стеке, он сообщает, что функция использует порядок, описанный языком программирования Pascal, который отличается от C. (очень старая версия операционных систем, таких как MacOS и Windows, где развивается с использованием Pascal).
Ответ 6
Вероятно, это избыточная/устаревшая кодировка, оставшаяся с 16-разрядной эры.
FAR использовался в 16-разрядных приложениях, указав, что для адреса требуется более 16 бит.
PASCAL (altion) - это тип преобразования, он позволяет компилятору знать, как устроен стек (используя соглашения о вызовах PASCAL), чтобы компилятор мог передать соответствующие параметры в функцию и из нее.
НТН
Ответ 7
В частности, PASCAL говорит, что аргументы функции передаются в порядке слева направо, это уменьшает размер кода (поскольку вызывающий абонент знает, насколько велик стек, и поэтому может его очистить)
C stdcall передает аргументы справа налево, это означает, что вы можете иметь переменное количество аргументов, но для очистки требуется больше кода.