我試圖在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’
試圖運行與-E標誌GCC,我清楚地看到,TYPE
正在int
取代。
所以這裏是我的問題,如何編寫我的宏以便能夠...使用它?
預先感謝您
只要擺脫圓括號(即第二行和最後一行),它應該編譯沒有任何錯誤。 –