wake-up-neo.net

Was macht die fpermissive Flagge?

Ich frage mich nur, was der -fpermissive Flag funktioniert im G ++ Compiler? Ich bekomme:

fehler: Adresse des temporären [-fpermissive] nehmen

was ich lösen kann, indem ich den -fpermissive Flag an den Compiler.

EDIT : Ich habe gerade herausgefunden, was den temporären Adressfehler verursacht hat! Ich werde diesen Teil jetzt reparieren.

112
GradGuy

Direkt von den Dokumenten :

-fpermissive
Führen Sie ein Downgrade einiger Diagnosen zu nicht konformem Code von Fehlern zu Warnungen durch. Verwenden Sie also -fpermissive ermöglicht das Kompilieren von fehlerhaftem Code.

Fazit: Verwenden Sie nur, wenn Sie wissen, was Sie tun!

137
cli_hlt

Das -fpermissive flag veranlasst den Compiler, einige Dinge, die tatsächlich Fehler sind (aber von einigen Compilern zugelassen werden), als Warnungen zu melden, damit der Code kompiliert werden kann, auch wenn er nicht den Sprachregeln entspricht. Sie sollten das zugrunde liegende Problem wirklich beheben. Veröffentlichen Sie das kleinste kompilierbare Codebeispiel, das das Problem veranschaulicht.

-fpermissive
Führen Sie ein Downgrade einiger Diagnosen zu nicht konformem Code von Fehlern zu Warnungen durch. Verwenden Sie also -fpermissive ermöglicht das Kompilieren von fehlerhaftem Code.

44
David Schwartz

Wenn Sie etwas geschrieben haben, das nach dem Sprachstandard nicht zulässig ist (und daher kein genau definiertes Verhalten sein kann, was Grund genug ist, dies nicht zu tun), das aber zufällig auf einige abgebildet wird Art von ausführbarer Datei, wenn sie naiv an die Compilierungs-Engine übergeben wird, dann -fpermissive macht genau das, anstatt mit dieser Fehlermeldung anzuhalten. In einigen Fällen verhält sich das Programm dann genau so, wie Sie es ursprünglich beabsichtigt hatten, aber Sie sollten sich auf keinen Fall darauf verlassen, es sei denn, Sie haben einen besonderen Grund, keine andere Lösung zu verwenden.

16
leftaroundabout

Wenn Sie einen realen Anwendungsfall für dieses Problem suchen, können Sie versuchen, eine sehr alte Version von X Windows zu kompilieren, z. B. XFree86 oder XOrg aus dem Jahr 2004 mit einer "modernen" (Husten-) Version von gcc , wie z. B. 4.9.3.

Sie werden feststellen, dass die Build-CFLAGS sowohl "-ansi" als auch "-pedantic" angeben. In der Theorie bedeutet dies "explodieren, wenn etwas auch nur geringfügig gegen die Sprachspezifikation verstößt". In der Praxis hat die 3.x-Serie von gcc nicht viel von solchen Dingen erfasst. Wenn Sie sie mit 4.9.3 erstellen, bleibt eine rauchende Lücke im Boden, es sei denn, Sie setzen CFLAGS und BOOTSTRAPCFLAGS auf "-fpermissive".

Wenn Sie dieses Flag verwenden, werden die meisten dieser C-Dateien tatsächlich erstellt, und Sie können frei zu dem versionsabhängigen Wrack wechseln, das der Lexer generiert. =]

6
breakpoint