Я пытаюсь реализовать общий стек в C с помощью большого макроса (не лучшим образом, но здесь дело не в этом). Этот макрос содержит функции деклараций, структуры и функции вызовов, с TYPE
типа, который будет заменен на то, что нужно:Общий многострочный макрос с параметрами
#define STACK(TYPE) \
( \
struct stack \
{ \
size_t size; \
struct container *top; \
}; \
\
struct container \
{ \
TYPE data; \
struct container *next; \
}; \
\
struct stack *stack_init(void) \
{ \
struct stack *s = malloc(sizeof (struct stack)); \
if (!s) \
return NULL; \
return s; \
} \
... ...
)
Этот заголовочный файл будет называться в любом .c файле с этой линией
#include "utils_stack.h"
STACK(int)
Вещь, пробовав все возможные формы синтаксиса, gcc попросил меня попробовать, я не могу найти способ заставить его работать. Я попытался со скобками, скобками, обоими, ... Код просто не работает. Здесь ошибка я получаю с выше синтаксиса, например: error: expected identifier or ‘(’ before ‘struct’
При попытке запустить GCC с флагом -E, я ясно вижу, что TYPE
заменяется int
.
Итак, вот мой вопрос, Как мне написать свой макрос, чтобы ... использовать его?
Спасибо заранее
Просто избавитесь от круглых скобок (то есть второй и последней строки), и он должен скомпилироваться без каких-либо ошибок. –