Compiler-Warnungen zu inet_ntoa

17/10/2007 - 13:52 von Gilbert Mirenque | Report spam
Hallo NG,
ich habe eine kleine Client-Server-Applikation geschrieben, basierend
auf dem UDP-Protokoll. Wenn der Server eine Verbindung erhàlt, möchte
ich die IP-Adresse des Clients auf der Konsole ausgeben. Dazu habe ich
folgenden Code:

recvcc = recvfrom(s, (void *) &req, reqlen,0, (struct sockaddr *)
&remote, (socklen_t*) &fromlen );
.../* Fehlerbehandlung */
printf("received data from client with IP: %s
",inet_ntoa(remote.sin_addr));

Nun bringt mir der Compiler zwei Warnungen:

(1) Warnung: Implizite Deklaration der Funktion »inet_ntoa«
(2) Warnung: format »%s« erwartet Typ »char *«, aber Argument 2 hat
Typ »int«

zu (1): Tritt doch normalerweise auf, wenn ich dem Compiler nicht vor
der Benutzung einer Funktion gesagt habe, wo er sie finden kann. Aber
wenn er sie nicht finden kann, dann würde er doch da generell einen
Fehler bringen, oder?

zu (2): Verstehe ich überhaupt nicht, da doch inet_ntoa(..) einen Wert
vom Typ "char *" zurückgibt. Also warum wird mir da gesagt, dass ein
int-Wert zurückgegeben wird?

Mein kleines Programm funktioniert natürlich auch trotz der Warnungen
aber mich würde es schonmal interessieren, was es damit auf sich hat.
Vielleicht könnt ihr mir da weiterhelfen.

MfG
Gilbert
 

Lesen sie die antworten

#1 Rainer Weikusat
17/10/2007 - 14:16 | Warnen spam
Gilbert Mirenque writes:
ich habe eine kleine Client-Server-Applikation geschrieben, basierend
auf dem UDP-Protokoll. Wenn der Server eine Verbindung erhàlt, möchte
ich die IP-Adresse des Clients auf der Konsole ausgeben. Dazu habe ich
folgenden Code:

recvcc = recvfrom(s, (void *) &req, reqlen,0, (struct sockaddr *)
&remote, (socklen_t*) &fromlen );
.../* Fehlerbehandlung */
printf("received data from client with IP: %s
",inet_ntoa(remote.sin_addr));



Ein haeufig gemachter Fehler ist hier noch, fromlen vor dem ersten
Aufruf nicht mit sizeof(struct sockaddr) zu initialisieren.

Nun bringt mir der Compiler zwei Warnungen:

(1) Warnung: Implizite Deklaration der Funktion »inet_ntoa«
(2) Warnung: format »%s« erwartet Typ »char *«, aber Argument 2 hat
Typ »int«

zu (1): Tritt doch normalerweise auf, wenn ich dem Compiler nicht vor
der Benutzung einer Funktion gesagt habe, wo er sie finden kann. Aber
wenn er sie nicht finden kann, dann würde er doch da generell einen
Fehler bringen, oder?

zu (2): Verstehe ich überhaupt nicht, da doch inet_ntoa(..) einen Wert
vom Typ "char *" zurückgibt. Also warum wird mir da gesagt, dass ein
int-Wert zurückgegeben wird?



Die erste Warnung teil Dir mit, dass kein Prototyp fuer die Routine
gefunden werden konnte. Die zweite kommt daher, dass der Compiler
deswegen annimmt, der Rueckgabetyp waere int.

Beides sollte nach Einbinden der fehlenden header (=> inet_ntoa(3))
verschwunden sein.

Ähnliche fragen