sizeof nicht anwendbar ?
-
Hi !
Folgendes Programm bindet den Linux tcp Header /usr/include/netinet/tcp.h ein.
#include <netinet/tcp.h> #include <stdio.h> int main( int argc , char** argv ) { printf("%d" , sizeof( struct tcphdr ) ); }
Allerdings erhalte ich folgenden Fehler, wenn ich das Programm mit folgendem Befehl kompiliere:
gcc -std=c99 -o server server_v2.c server_v2.c: In function main: server_v2.c:19: error: invalid application of sizeof to incomplete type struct tcphdr
Wenn ich das ganze so kompiliere funktionierts:
gcc -o server server_v2.c
Wie kommts ?
-
Mit -std=c99 übersetzt der gcc ziemlich strikt nach dem C99 Standard, welcher diese Operation (sizeof auf einen "incomplete type") eben nicht erlaubt. Ohne -std=c99 (bzw. mit -std=gnu99) werden GNU-Erweiterungen erlaubt, wie eben auch das normalerweise verbotene.
-
Eigentlich ist es so, dass der gcc bei -std=c99 die Umgebungsdefines _POSIX_SOURCE, _BSD_SOURCE etc. nicht setzt, wodurch tatsächlich keine struct tcphdr definiert wird. Mit -std=gnu99 werden die gesetzt, und dadurch ist tcphdr auch wieder complete.
Hier wird nix normalerweise verbotenes erlaubt gemacht, wie denn auch, soll der Compiler die Größe vorhersagen?
-
Krass! Keine schlechten Antworten. Danke!
-
Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum Compiler-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.