Calling conventions

Специфікації про те, як викликаються функції.

Угоди про виклики визначають, як зухвалий код взаємодіє з процедурами при виклику. Вони визначають правила про те, як параметри поміщаються в стек, як повертаються значення і коли очищається стек. Ця інформація корисна при взаємодії з кодом, написаним на інших мовах, особливо для мови асемблера. У деяких випадках угоди про виклики також застосовуються як оформлення імен процедур.

FreeBASIC підтримує 3 конвенції: stdcall. cdecl і pascal. визначаються з stdcall. cdecl і pascal. відповідно. Її викликає конвенція може бути визначена в декларації процедури або у визначенні відразу після назви процедури. У декларації процедури повинно бути ту ж саму угоду конвенції як і у визначенні.

stdcall за замовчуванням конвенція викликів на Windows, і для процедур з блоками Extern "Windows" і Extern "Windows-Ms". Це конвенція за замовчуванням так само використовується в Windows API.


  • На DOS і Windows платформах, ім'я процедури оформляється з суфіксом "@N", де N загальний розмір в байтах всіх параметрів.


У конвенції cdecl. параметри процедур поміщаються в стек до виклику процедури в зворотному порядку, а не в тому, якому вони оголошені, тобто справа наліво. Зухвалий код відповідає за виштовхування параметрів з стека.

cdecl за замовчуванням конвенція викликів для Linux, * BSD, і DOS, і для процедур з блоками Extern "C" і Extern "C ++". Так само ця конвенція за замовчуванням для компіляторів C і C ++.

pascal є конвенцією за замовчуванням для Pascal і серії компіляторів Microsoft QuickBASIC.

У наступній таблиці наведено відмінності між конвенціями:

Параметри поміщаються в стек виклику

Схожі статті