Вариативный макрос с 3 терминами

Я пытаюсь понять код C++, который явно читает dll. Кто-нибудь знает, как на самом деле работает строка #define LFE_API(name) LFE_##name name ниже? Я понимаю #define LFE_API(name) LFE_##name, но меня смущает последнее "имя".

    struct Interface
{
    #   ifdef LFE_API
    #       error You can't define LFE_API before. 
    #   else
    #       define LFE_API(name) LFE_##name name
                LFE_API(Init);
                LFE_API(Close);
                LFE_API(GetProperty);
    #       undef LFE_API
    #   endif
};

person Gooly    schedule 18.08.2010    source источник


Ответы (2)


Поскольку первая часть макроса (LFE_##name) просто объединяет обе части, вызов LFE_API создает переменную с именем name типа LFE##name, например:

LFE_API(Init) расширяется до LFE_Init Init;

person Dr. Snoopy    schedule 18.08.2010

LFE_Init Init;

и т.п.

Запустите g++ -E в коде, чтобы увидеть, что получилось. Элементу структуры нужен тип и имя.

person xcramps    schedule 18.08.2010
comment
Спасибо, я раньше не знал, что это тип и имя. - person Gooly; 19.08.2010