Warnungen...

Unicate

Erfahrenes Mitglied
Hi all!

Ich muss meinen Beleg (ANSI C) schreiben. Da ich den so gut als möglich machen möchte, dürfen beim compilen keine Warnungen mehr angezeigt werden.

Code:
// Prototyp in dvl.h
static void errorHandler(unsigned int iErrorCode);
....
// deklaration in dvl.c (included dvl.h)
static void errorHandler(unsigned int iErrorCode)
{
...
}
Es kommt trotzdem eine Warnung:

Code:
gcc -Wall -o konto main.c
dvl.h:56: Warnung: »errorHandler« als »static« deklariert, aber nirgendwo definiert

Wieso? Was mach ich falsch?
Die Funktion soll static sein, damit man aus keiner anderen Datei auf diese Funktion zugreifen kann (ähnlich wie private)

2te Fehlermeldung:
Code:
kunden.c: In Funktion »createNewCustomer«:
kunden.c:25: Warnung: Übergabe des Arguments 3 von »addItemToList« von inkompatiblem Zeigertyp
Der dazu gehörige Code:
Code:
//kunden.c
... createNewCustomer()
{
...
addItemToList(kunden, kunde, &cmpLastname);
und noch der Prototyp:
Code:
...
int addItemToList(tList *pList, void *pItem, int(*fcmp)(void *pItList,void *pItNew));
....

Ich nehme mal an das ich den Funktionszeiger noch typecasten muss. aber nach was? Und ja, die Funktionsübergaben MUSS sein, kann ich nichts dran ändern war vorgabe.
 
Zuletzt bearbeitet:
Hi.
Ich muss meinen Beleg (ANSI C) schreiben. Da ich den so gut als möglich machen möchte, dürfen beim compilen keine Warnungen mehr angezeigt werden.

Code:
// Prototyp in dvl.h
static void errorHandler(unsigned int iErrorCode);
....
// deklaration in dvl.c (included dvl.h)
static void errorHandler(unsigned int iErrorCode)
{
...
}
Es kommt trotzdem eine Warnung:

Code:
gcc -Wall -o konto main.c
dvl.h:56: Warnung: »errorHandler« als »static« deklariert, aber nirgendwo definiert

Wieso? Was mach ich falsch?
Es macht keinen Sinn Funktionen die "static" deklariert sind in einer Headerdatei zu deklarieren. In der dvl.c Datei wird die Funktion definiert, was auch ok ist. Wenn du die Headerdatei allerdings in einer anderen Datei einbindest, erhält diese (aufgrund des static Modifizierers) eine eigene Version der statischen Funktion, welche du aber nirgendwo definierst.
2te Fehlermeldung:
Code:
kunden.c: In Funktion »createNewCustomer«:
kunden.c:25: Warnung: Übergabe des Arguments 3 von »addItemToList« von inkompatiblem Zeigertyp
Der dazu gehörige Code:
Code:
//kunden.c
... createNewCustomer()
{
...
addItemToList(kunden, kunde, &cmpLastname);
und noch der Prototyp:
Code:
...
int addItemToList(tList *pList, void *pItem, int(*fcmp)(void *pItList,void *pItNew));
....

Ich nehme mal an das ich den Funktionszeiger noch typecasten muss. aber nach was? Und ja, die Funktionsübergaben MUSS sein, kann ich nichts dran ändern war vorgabe.
Wie ist denn cmpLastname deklariert?

Du müßtest halt nach int(*)(void *pItList,void *pItNew) casten.

Gruß
 
Zurück