Hallo zusammen, ich schaue mir gerade den "Beej's Guide to Network Programming" an. In Kapitel 5 wird die Verwendung von `getaddrinfo` gezeigt (siehe [1]). Ich bekomme je nach C-Standard den ich beim Kompilieren angebe Fehlermeldungen. Meine gcc-Version ist "gcc (Debian 10.2.1-6) 10.2.1 20210110", also müsste der Default "-std=gnu11" sein. 1. **gcc -Wall -Wextra showip.c**: Keine Fehler oder Warnungen 2. **gcc -Wall -Wextra -std=gnu11 showip.c**: Keine Fehler oder Warnungen 3. **gcc -Wall -Wextra -std=c11 showip.c**: showip.c:15:18: error: storage size of ‘hints’ isn’t known 4. **gcc -Wall -Wextra -std=c99 showip.c**: showip.c:15:18: error: storage size of ‘hints’ isn’t known 6. **gcc -Wall -Wextra -std=c2x showip.c**: showip.c:15:18: error: storage size of ‘hints’ isn’t known Offensichtlich ist die Fehlermeldung nicht dem (alten) Standard zu verdanken, sondern einer fehlenden Extension die gcc anbietet. Frage: welche Erweiterung nutzt der Schalter "-std=gnu11" hier und welche Änderungen sind notwendig um ein "Standard-C" (in welcher Version auch immer) nutzen zu können? Gruß Dennis [1] https://beej.us/guide/bgnet/examples/showip.c
Dennis S. schrieb: > Frage: welche Erweiterung nutzt der Schalter "-std=gnu11" hier und > welche Änderungen sind notwendig um ein "Standard-C" (in welcher Version > auch immer) nutzen zu können? Schau doch einfach in <netdb.h> rein.
1 | /* Extension from POSIX.1:2001. */
|
2 | #ifdef __USE_XOPEN2K
|
3 | /* Structure to contain information about address of a service provider. */
|
4 | struct addrinfo |
5 | {
|
6 | int ai_flags; /* Input flags. */ |
7 | int ai_family; /* Protocol family for socket. */ |
8 | int ai_socktype; /* Socket type. */ |
9 | int ai_protocol; /* Protocol for socket. */ |
10 | socklen_t ai_addrlen; /* Length of socket address. */ |
11 | struct sockaddr *ai_addr; /* Socket address for socket. */ |
12 | char *ai_canonname; /* Canonical name for service location. */ |
13 | struct addrinfo *ai_next; /* Pointer to next in list. */ |
14 | };
|
Du musst ihm also irgendwie verklickern, dass du ein XOPEN2K kompatibles Build haben möchtest. Auch wenn du es mit der Compilerversion indirekt beschrieben hast, wäre es natürlich gut, das benutzte OS mit dazu zu nennen. Bei FreeBSD sehe ich beispielsweise keine solche Definitionsabhängigkeiten in den Headers. Related: https://stackoverflow.com/questions/33076175/why-is-struct-addrinfo-defined-only-if-use-xopen2k-is-defined
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.