#cpp #c
В исходных кодах движка Irrlicht я встретил непонятное для меня определение фунуции.
В нем используются два идентификатора препроцессора:
#define IRRLICHT_API
#define IRRCALLCONV
А после они используются в определении функции:
extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDevice(
video::E_DRIVER_TYPE deviceType = video::EDT_SOFTWARE,
const core::dimension2d& windowSize = (core::dimension2d(640,480)),
u32 bits = 16,
bool fullscreen = false,
bool stencilbuffer = false,
bool vsync = false,
IEventReceiver* receiver = 0);
Что делают эти идентификаторы?
Ответы
Ответ 1
Они делают именно то, что следует из их положения в объявлении функции: дают автору кода возможность использовать препроцессор для того, чтобы "вставить" в объявление функции какие-то дополнительные квалификаторы. Например, завтра он может решить сделать #define IRRLICHT_API __declspec(dllimport) #define IRRCALLCONV __cdecl Вполне может быть это уже делается в рассматриваемом вами коде, в зависимости от конфигурации - вы просто не заметили. В приведенном же вами случае это просто пустые макро. В таком виде они ничего не делают.Ответ 2
Судя по названию, IRRLICHT_API должен декларировать импорт или экспорт функции (например __declspec(dllimport)), а IRRCALLCONV соглашение о вызовах, используемое для данной функции (например __stdcall). Но если они объявлены как в вопросе, то они ничего не делают.
Комментариев нет:
Отправить комментарий