Variadic Macro с 3 условиями - PullRequest
       47

Variadic Macro с 3 условиями

0 голосов
/ 19 августа 2010

Я пытаюсь понять код 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
};

Ответы [ 2 ]

1 голос
/ 19 августа 2010
LFE_Init Init;

и т. Д.

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

1 голос
/ 19 августа 2010

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

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

...