Для примера рассмотрим винду.
Как известно, транслятор может передавать параметры в функции через регистры, а может через стек. Когда весь проект транслируется с одинаковыми ключами трансляции, то все понятно. Но, например, в проекте есть библиотека *.lib, которая принимает параметры некоторых функций через регистры, а весь проект принимает параметры функций через стек. Как транслятор поймет, что некоторые библиотечные функции надо вызвать по-другому?
Способ передачи параметров и прочие детали соглашения о вызовах должен быть однозначно понятен компилятору из объявления функции.
Если библиотека была странслирована тогда, когда компилятор делал другие выводы о соглашениях о вызовах на основе имеющегося объявления библиотечной функции, то в общем случае такую библиотеку будет невозможно использовать.
В некоторых случаях объявления функций для "нового" компилятора можно подогнать так, чтобы они порождали правильные вызовы для "старого" кода. Хрестоматийный пример - переход стандартной библиотеки языка C с K&R объявлений на современные объявления с прототипами, вследствие чего прототипы стандартных функций подогнаны под K&R соглашения о вызовах: все объявления параметров "классических" функций сделаны с учетом default argument promotions, т.е. не используют типов char
, short
и float
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Возник вопрос по поводу событий и свойств при работе с video элементом, а именно, при создании своего контроллера остановился на моменте с fullscreen...
Всем приветЕсть вот такой блок: скажите пожалуйста, что нужно сделать, чтобы была возможность скролить этот блок при зажатой левой клавиши...