typedef void fun(unsigned char *buf); ???
-
Hallo, ich bin eigentlich Java programmierer muss mich aber gerade mit C rumschlagen. Ich hätte da 2 fragen.
In einer .h Datei ist unter anderem folgendes festgelegt:
typedef void fun(unsigned char *buf);
int ctr(unsigned char *buf, fun inc,);
Ich versteh das so das wenn ich die Funktion ctr aufrufe, muss ich die Funktion fun als Parameter mitgeben. Da diese Funktion noch nicht existiert habe ich sie selbst implementiert.
void fun(unsigned char *buf) { ... }
In einer weiteren .h/.c Datei. Und die header Datei importiert. Aber wenn ich kompiliere sagt er:
error: "fun" redeclared as different kind of symbol
Der Funktionsaufruf sieht so aus:
unsigned char buf[] = {0x10}; ctr(buf, fun);
Die zweite Frage ist, habe ich buf richtig übergeben oder muss es heißen &buf?
Mich verwirrt dieser Stern was ja wohl nen Pointer ist.Danke.
Grüße, slobo
-
slobo schrieb:
Hallo, ich bin eigentlich Java programmierer muss mich aber gerade mit C rumschlagen. Ich hätte da 2 fragen.
In einer .h Datei ist unter anderem folgendes festgelegt:
typedef void fun(unsigned char *buf);
int ctr(unsigned char *buf, fun inc,);
Ich versteh das so das wenn ich die Funktion ctr aufrufe, muss ich die Funktion fun als Parameter mitgeben.
Nein, fun ist ein Typ. Du musst ctr einen Wert dieses Typs übergeben, also einen Zeiger auf irgendeine Funktion, die die passende Signatur hat.
void fun(unsigned char *buf)
Die Signatur stimmt, aber der Name kollidiert mit dem Typnamen. Du kannst hier jeden beliebigen Namen wählen (der noch nicht belegt ist).
unsigned char buf[] = {0x10}; ctr(buf, fun);
Die zweite Frage ist, habe ich buf richtig übergeben oder muss es heißen &buf?
Mich verwirrt dieser Stern was ja wohl nen Pointer ist.Syntaktisch ja (buf ist vom Typ her ein unsigned-char Array, zerfällt aber bei jeder sich bietenden Gelegenheit in einen unsigned-char-Zeiger auf das erste Element dieses Arrays), allerdings ist dein Buffer nur 1 Zeichen groß. Je nachdem, was die Funktion damit macht, ist das vielleicht etwas klein ...
-
stichwort funktionzeiger.....
-
#define arraysizeof(x) (sizeof(x)/sizeof(x[0]) typedef void (*fun_t)(unsigned char *buf, size_t len); int ctr(unsigned char *buf, size_t len, fun_t inc); void fun(unsigned char *buf, size_t len) { ... } unsigned char buf[] = {0x10}; ctr(buf, arraysizeof(buf), fun);
bei buf, am besten auch die länge mit übergeben