ошибка: '#' не сопровождается параметром макроса - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь написать макрос, который генерирует код для пула объектов для любого данного класса объектов в C. Я получаю error: '#' is not followed by a macro parameter всякий раз, когда запускаю препроцессор

Я пытался заменить x ##y with:

#define CONCAT1(x, y) x##y
#define CONCAT2(x, y) CONCAT1(x, y)

, как это было предложено в аналогичном вопросе

#define CONCAT1(x, y) x##y
#define CONCAT2(x, y) CONCAT1(x, y)

#define DECLARE_POOL(CLASS, LEVEL1, LEVEL2) {\
\
    #define CONCAT2(CLASS, _Pool_Level1) LEVEL1\
    #define CONCAT2(CLASS, _Pool_Level2) LEVEL2\
\
    CLASS* CONCAT2(CLASS, _Pool)[LEVEL1] = { 0 };\
\
    int CONCAT2(CLASS, _Available_Head) = -1;\
    int CONCAT2(CLASS, _Available_Tail) = -1;\
\
    int CONCAT2(CLASS, _In_Use_Head) = -1;\
    int CONCAT2(CLASS, _In_Use_Tail) = -1;\
\
    int CONCAT2(CLASS, _Increase_Pool)(int Level1_Address){\
\
    }\
\
    int CLASS(int Address) {\
\
    }\
\
    int CONCAT2(CLASS, _Delete)(int Address) {\
\
    }\
\
    int CONCAT2(CLASS, s)(int Address)\
\
    }\
\
    int CONCAT2(CLASS, _Save_All)(void)\
\
    }\
\
    int CONCAT2(CLASS, _Restore_All)(void)\
\
    }\
    int CONCAT2(CLASS, _Free_All)(void)\
\
    }\
}

Ожидается: код проходит через препроцессор и выдает прототипы функций для объектов типа "CLASS"
Фактические результаты:

ошибка: «#» не сопровождается параметром макроса
#define DECLARE_POOL (CLASS, LEVEL1, LEVEL2) {\

1 Ответ

1 голос
/ 26 сентября 2019

Вы не можете использовать #define внутри макроса.Или любая другая директива препроцессора, в этом отношении.

...