Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Что делают идентификаторы препроцессора в объявлении функции С++?

#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). Но если они объявлены как в вопросе, то они ничего не делают.

Комментариев нет:

Отправить комментарий