Ich habe den folgenden C99-Code geschrieben und habe mich über die struct-Deklaration gewundert. Darin deklariere ich zwei Funktionszeiger, die letztendlich auf die beiden Push/Pop-Methoden im Hauptcode zeigen. In den Funktionszeiger-Deklarationen habe ich die Argumente weggelassen und das Programm kompiliert ok. Ist das richtig? Ich bin sicher, ich habe gelesen, dass die Argumente geliefert werden müssen. Ist das richtiges C99-Verhalten?Ist es richtig C99, dass Sie Argumente in Funktionszeigerdeklarationen in Strukturen nicht angeben müssen?
#include <stdio.h>
#define INITIAL_STACK_SIZE 1000
typedef struct stack
{
int index;
void *stack[INITIAL_STACK_SIZE];
void* (*Pop)(); //<-- Is this correct?
void (*Push)(); //<-- Is this correct?
} stack;
stack CreateStack(void);
void PushStack(stack*, void *);
void *PopStack(stack*);
stack CreateStack(void)
{
stack s = {0, '\0'};
s.Pop = PopStack;
s.Push = PushStack;
return s;
}
void PushStack(stack *s, void *value)
{
if(s->index < INITIAL_STACK_SIZE)
{
s->stack[s->index++] = value;
}
else
{
fputs("ERROR: Stack Overflow!\n", stderr);
}
}
void *PopStack(stack *s)
{
if(s->index > 0)
{
return s->stack[--s->index];
}
else
{
fputs("ERROR: Stack Empty!\n", stderr);
return NULL;
}
}
int main(int argc, char *argv[])
{
stack s = CreateStack();
s.Push(&s, "Hello");
s.Push(&s, "World");
printf("%s\n", (char*)s.Pop(&s));
printf("%s\n", (char*)s.Pop(&s));
return 0;
}
Ich habe versucht, die Argumente der Funktionszeiger hinzugefügt, aber ich habe einen Compiler-Fehler von Extraneous old-style parameter list.
so richtig es ist vermute ich, würde aber eine andere Meinung lieben.
BEARBEITEN: Ich habe den oben genannten 'Extraneous Old-Style-Parameter-Liste' Fehler, weil ich den Typedef-Namen 'Stack' anstelle der Verwendung des Struct-Schlüsselwort mit 'Stack' zu definieren, es war die Struktur, die ich gerade definiere .
Ich verwende den Pelles C Compiler.
Ich habe tatsächlich einen Fehler in meinem Code gemacht.Ich habe den Typedef-Namen 'stack' verwendet, anstatt das Schlüsselwort struct mit 'stack' zu verwenden, um zu definieren, dass es die Struktur war, die ich gerade definiere. Danke. –
Ja, ich habe den gleichen Fehler gemacht, als ich es das erste Mal versucht habe, also dachte ich, das könnte auch dein Problem gewesen sein. – zneak
Nicht unhöflich sein, aber ich gab die gleiche Antwort zwei Minuten vor dem Zneak. – Trent