Generischer Stack mit Macros funktioniert nicht
-
Hi
Ich bin gerade dabei einen generischen Stack mit Macros zu implementieren. Ich habe im Internet etwas dazu gefunden. Allerdings bekomme ich Fehlermeldungen und weiss nicht wieso.
Code:
#include <stdio.h> #include <stdlib.h> #define DECLARE_STACK(type) \ typedef struct stack_##type##_s { \ type data; \ struct stack_##type##_s *next; \ } stack_##type; \ \ void stack_##type##_push(stack_##type **stack, type data); \ #define DEFINE_STACK(type) \ void stack_##type##_push(stack_##type **stack, type data) { \ stack_##type *new_node = malloc(sizeof(*new_node)); \ new_node->data = data; \ new_node->next = *stack; \ *stack = new_node; \ } \ int main() { DECLARE_STACK(int); DEFINE_STACK(int); system("pause"); }
Und hier die Fehlermeldungen:
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(24): error C2143: syntax error : missing ';' before 'type'
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(24): error C2065: 'new_node' : undeclared identifier
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(24): error C2223: left of '->data' must point to struct/union
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(24): error C2065: 'data' : undeclared identifier
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(24): error C2065: 'new_node' : undeclared identifier
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(24): error C2223: left of '->next' must point to struct/union
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(24): error C2065: 'stack' : undeclared identifier
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(24): error C2100: illegal indirection
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(24): error C2065: 'stack' : undeclared identifier
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(24): error C2100: illegal indirection
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(24): error C2065: 'new_node' : undeclared identifier
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(26): error C2143: syntax error : missing ')' before 'string'
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(26): error C2143: syntax error : missing '{' before 'string'
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(26): error C2059: syntax error : '<Unknown>'
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(26): error C2059: syntax error : ')'
1>c:\users\urs\documents\visual studio 2010\projects\c\ctesting\ctesting\main.c(27): error C2059: syntax error : '}'
1>Kann mir jemand sagen wo mein Fehler liegt? Ich habe ein Tutorial gelesen zu Macros, kenne mich aber trotzdem nicht allzu gut aus damit.
-
Lokale Funktionsdefinitionen sind nicht erlaubt, was genau soll das eigentlich werden?
-
cooky451 schrieb:
Lokale Funktionsdefinitionen sind nicht erlaubt, was genau soll das eigentlich werden?
Ja logisch, ich darf in einer Funktion ja keine anderen Funktionen haben.
Ich habe im Internet ein Tutorial gefunden das zeigt, wie man auf zwei verschiedene Arten einen generischen Stack implementieren kann.
1. Macro Hack
2. Mit void*Ich habs bereits mit void* gemacht und moechte jetzt aus Spass das ganze mit Macros hinbekommen.
Mir ist vollkommen bewusst, dass man das ganze nicht so machen sollte aber ich finds grad lustig. Ausserdem ists mal ein Grund mich etwas mit Macros zu beschaeftigen