4 Stimmen

struct ip_mreq verschwindet beim Kompilieren mit -std=c99

Auf einigen unserer Linux-Rechner führt das Kompilieren mit gcc -std=c99 dazu, dass struct ip_mreq verschwindet (enthalten in netinet/in.h)

Gibt es eine andere Schnittstelle, die wir verwenden sollen?

0 Stimmen

Was meinen Sie mit "verschwinden"? Können Sie eine tatsächliche Compiler/Linker-Fehlermeldung bereitstellen?

0 Stimmen

Mit cpp kann ich sehen, dass die Struktur definiert ist oder nicht, je nach dem Vorhandensein von -std=c99

5voto

bdonlan Punkte 213545

Versuchen Sie --std=gnu99.

Die Vorgabe für GCC ist '--std=gnu89', was C89 mit GNU-Erweiterungen bedeutet. Wenn Sie '--std=c99' wählen, aktivieren Sie C99, aber deaktivieren die GNU-Erweiterungen. Mit '--std=gnu99' wird sowohl die Unterstützung für C99 als auch für die GNU-Erweiterungen aktiviert, so dass Sie das Beste aus beiden Welten erhalten.

2 Stimmen

Oder verwenden Sie -std=c99 -D_GNU_SOURCE

0voto

dwc Punkte 22998

Ich glaube nicht, dass es vor C99 eine andere Schnittstelle gibt. Möglicherweise können Sie dies mit -std=c99 wenn Sie am Anfang Ihrer Quelle(n) Folgendes hinzufügen:

#define __EXTENSIONS__

aber ein besserer Weg ist wahrscheinlich

#define _XOPEN_SOURCE

Bitte beachten Sie, dass ich nicht bestätigt habe.

0voto

Ich habe das gleiche Problem. Alles kompiliert gut mit gcc, wenn ich nicht "-std=c99", aber wenn die Flagge enthalten ist, schlägt der Compiler sagen, dass das Feld mit Typ 'struct ip_mreq' "unvollständigen Typ hat."

Dies ist ein Problem, da ich auf einige C99-Funktionen angewiesen bin.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X