C: Warnung für inet_ntop
Alex
- programmiertechnik
0 Christian Seiler0 Alex
Hallo alle zusammen,
ich bekomme beim Kompilieren des folgenden Programms mit gcc 3.3.5 immer das Warning "Vergleich zwischen Zeiger und Ganzzahl" für die Zeile, in der inet_ntop aufgerufen wird:
#include <netinet/in.h>
int main(void) {
struct sockaddr_in addr;
char str_ip[INET_ADDRSTRLEN];
...
if (inet_ntop(AF_INET, &addr.sin_addr, str_ip, sizeof(str_ip)) == NULL) {
/* Fehlerbehandlung */
}
...
}
Alle Dokumente zu inet_ntop geben an, daß ein Nicht-NULL-Zeiger zurückgegeben wird, wenn alles glatt lief und NULL im Fehlerfall. Warum beschwert sich der Compiler denn nun?
Viele Grüße von Alex
Hallo!
ich bekomme beim Kompilieren des folgenden Programms mit gcc 3.3.5 immer das Warning "Vergleich zwischen Zeiger und Ganzzahl" für die Zeile, in der inet_ntop aufgerufen wird:
Alle Dokumente zu inet_ntop geben an, daß ein Nicht-NULL-Zeiger zurückgegeben wird, wenn alles glatt lief und NULL im Fehlerfall. Warum beschwert sich der Compiler denn nun?
Du musst die komplette Fehlermeldung berücksichtigen:
ntop.c:7: Warnung: Implizite Deklaration der Funktion »inet_ntop«
ntop.c:7: Warnung: Vergleich zwischen Zeiger und Ganzzahl
Sprich: Der Compiler kennt die Funktion inet_ntop nicht und erstellt daher einen impliziten Prototypen für die Funktion. Laut C-Standard hat der Default-Prototyp aber »int« als Rückgabewert - und damit vergleichst Du NULL (meist (void*)0) mit einem Integer - und deswegen gibt's die Warnung.
Auf 32bit-x86-Systemen ist die Warnung egal, weil int und Zeiger genau so groß sind und beide die gleiche Speicherklasse bzgl. Calling-Conventions haben - auf 64bit-Systemen kann das dagegen knallen, da Pointer 64bit sind, ints aber nur 32bit (amd64 Linux zumindest, long ist halt 64bit und damit != int).
Du willst noch ein
#include <arpa/inet.h>
in Deinen Code einbauen, wie es die Manpage von inet_ntop auch erläutert.
Viele Grüße,
Christian
Hallo Christian,
Du musst die komplette Fehlermeldung berücksichtigen:
ntop.c:7: Warnung: Implizite Deklaration der Funktion »inet_ntop«
ntop.c:7: Warnung: Vergleich zwischen Zeiger und Ganzzahl
Daß die Funktion nicht bekannt ist, war mein erster Gedanke. Verworfen habe ich das aber ziemlich schnell wieder, weil ich eben außer dem im OP beschriebenen Warning keine Meldungen erhielt. Allerdings fällt mir erst jetzt auf, daß ich nicht mit -Wall kompiliert habe ... Mit gibt's nämlich das von Dir genannte Warning.
Du willst noch ein
#include <arpa/inet.h>
in Deinen Code einbauen, wie es die Manpage von inet_ntop auch erläutert.
Ja, so funktioniert's. Danke Dir! Das hab ich völlig überlesen, obwohl es fast in der ersten Zeile steht.
Viele Grüße von Alex