web-dev-qa-db-ja.com

fpermissiveフラグは何をしますか?

G ++コンパイラで-fpermissiveフラグが何をしているのだろうか?私は得ています:

エラー:一時的なアドレスを取得[-fpermissive]

-fpermissiveフラグをコンパイラに渡すことで解決できます。

EDIT:一時的なアドレスエラー部分の原因を見つけました!今からその部分を修正します。

112
GradGuy

ドキュメント から:

-fpermissive
不適合コードに関するいくつかの診断をエラーから警告にダウングレードします。したがって、-fpermissiveを使用すると、一部の不適合コードをコンパイルできます。

結論:何をしているのかわからない限り、使用しないでください

134
cli_hlt

-fpermissive flag を指定すると、コンパイラーは、実際にはエラー(ただし一部のコンパイラーでは許可されている)であるものを警告として報告し、言語規則に準拠していない場合でもコードをコンパイルできるようにします。根本的な問題を本当に修正する必要があります。問題を示す最小のコンパイル可能なコードサンプルを投稿します。

-fpermissive
不適合コードに関するいくつかの診断をエラーから警告にダウングレードします。したがって、-fpermissiveを使用すると、一部の不適合コードをコンパイルできます。

43
David Schwartz

言語標準で許可されていない(したがって、実際には明確に定義された振る舞いをすることができないため、それを行わないのに十分な理由である)何かを書いたが、たまたまsomeコンパイルエンジンに単純に供給された場合、実行可能ファイルの種類は、-fpermissiveがこのエラーメッセージで停止する代わりにそれを実行します。場合によっては、プログラムは当初意図したとおりに動作しますが、他のソリューションを使用しない特別な理由がない限り、絶対に依存しないでください。

15
leftaroundabout

実際のユースケースが必要な場合は、gccの「モダン」(咳)バージョンを使用して、非常に古いバージョンのX Windowsをコンパイルしてみてください(たとえば、2004年のXFree86またはXOrgのいずれか)。 、4.9.3など。

ビルドCFLAGSで「-ansi」と「-pedantic」の両方が指定されていることに気付くでしょう。理論的には、これは「言語仕様に少しでも違反するものがあれば爆発する」ことを意味します。実際には、3.xシリーズのgccはそのようなものをあまりキャッチしませんでした。4.9.3でビルドすると、CFLAGSとBOOTSTRAPCFLAGSを "-fpermissive"に設定しない限り、地面に喫煙穴が残ります。

そのフラグを使用すると、これらのCファイルのほとんどが実際にビルドされ、レクサーが生成するバージョン依存の残骸に自由に移動できます。 =]

6
breakpoint