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