Библиотеки, оптимизация и соглашения о вызове

81
05 июля 2021, 11:00

Для примера рассмотрим винду.

Как известно, транслятор может передавать параметры в функции через регистры, а может через стек. Когда весь проект транслируется с одинаковыми ключами трансляции, то все понятно. Но, например, в проекте есть библиотека *.lib, которая принимает параметры некоторых функций через регистры, а весь проект принимает параметры функций через стек. Как транслятор поймет, что некоторые библиотечные функции надо вызвать по-другому?

Answer 1

Способ передачи параметров и прочие детали соглашения о вызовах должен быть однозначно понятен компилятору из объявления функции.

Если библиотека была странслирована тогда, когда компилятор делал другие выводы о соглашениях о вызовах на основе имеющегося объявления библиотечной функции, то в общем случае такую библиотеку будет невозможно использовать.

В некоторых случаях объявления функций для "нового" компилятора можно подогнать так, чтобы они порождали правильные вызовы для "старого" кода. Хрестоматийный пример - переход стандартной библиотеки языка C с K&R объявлений на современные объявления с прототипами, вследствие чего прототипы стандартных функций подогнаны под K&R соглашения о вызовах: все объявления параметров "классических" функций сделаны с учетом default argument promotions, т.е. не используют типов char, short и float.

READ ALSO
Отображение своего видео контроллера (custom controls) в полноэкранном режиме (in fullscreen mode)

Отображение своего видео контроллера (custom controls) в полноэкранном режиме (in fullscreen mode)

Возник вопрос по поводу событий и свойств при работе с video элементом, а именно, при создании своего контроллера остановился на моменте с fullscreen...

82
alert при закрытии модального окна fancybox

alert при закрытии модального окна fancybox

Доброго времени сутокЕсть HTML в body только это

101
Как сделать возможность скролить блок с помощью мыши, не используя скроллбар?

Как сделать возможность скролить блок с помощью мыши, не используя скроллбар?

Всем приветЕсть вот такой блок: скажите пожалуйста, что нужно сделать, чтобы была возможность скролить этот блок при зажатой левой клавиши...

88