LINUX.ORG.RU

Помогите разгадать тайну макросной магии

 , ,


0

2

Ковырял я cube2 и нашел вот такой вот какиш:

static int addmodeltype(int type, model *(__cdecl *loader)(const char *))
{
    modeltypes[type] = loader;
    return type;
}

#define MODELTYPE(modeltype, modelclass) \
static model *__loadmodel__##modelclass(const char *filename) \
{ \
    return new modelclass(filename); \
} \
static int __dummy__##modelclass = addmodeltype((modeltype), __loadmodel__##modelclass);
И не могу толком разобрать макрос. Не, я знаю, для чего применяются макросы с ## и знаю, что конкретно делает макрос MODELTYPE. Но что означает __dummy__? Для чего используются символы подчеркивания в __loadmodel__##modelclass? Ясно ведь, не для красоты, так как функции такого вида в коде нигде не вызываются. Ссылка на весь файл: https://bitbucket.org/inish777/penteract/src/6a7de2864b785435b38aa9fd8859ce92...

★★

__ используются, чтобы не совпали с каким-нибудь пользовательским идентификатором, вызывая непонятную ошибку компиляции.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)

Они вызываются при инициализации приложения до main.

O02eg ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.