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


121

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

エラー:一時[-fpermissive]のアドレスを取得しています

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

編集:私は一時的なアドレスエラー部分を引き起こしているものを見つけました!今、その部分を修正します。

回答:


146

ドキュメントから直接

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

結論:何をしているのかわからない場合は使用しないでください!


4
最高票数の回答から、引用マニュアル+「何をしているのかがわかるまで使用しないでください」よりも多くの情報が必要です。これをググる必要はありません。非準拠コードのどのケースが正確にダウングレードされますか?
johannes_lalala

不適合コードはダウングレードされませんが、診断はエラーから警告までです。質問オープナーが例を示します。エッジケースが何であるかわからない場合は、使用を検討しないでください。
cli_hlt

2
申し訳ありませんが、違反はありませんが、「影響がわからない場合は何もしないでください」などのアドバイスは簡単で、すべての質問に当てはまり、何も答えません。
johannes_lalala

3
..申し訳ありませんが、まったく説明せずにマニュアルを引用するだけでは役に立ちません。特にマニュアルが非常にまばらである場合。
johannes_lalala

50

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

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


18

言語標準で許可されていないものを記述した場合(したがって、明確に定義された動作にはならないため、これを実行しない理由は十分あります)、次のように供給された場合ある種の実行可能ファイルにマップされます。コンパイルエンジンは、-fpermissiveこのエラーメッセージで停止する代わりに、それを実行します。場合によっては、プログラムは当初意図したとおりに動作しますが、他の解決策を使用しない特別な理由がない限り、これに依存すべきではありません。


3
言語標準で許可されていないものでも、明確に定義できます。実際、ほとんどすべてのコンパイラには、明確に定義された拡張機能があります。ただし、これは
パーミッシブの

8

このための実際の使用例が必要な場合は、非常に古いバージョンのX Windowsをコンパイルしてみてください(たとえば、分割のすぐ近くにある2004年のXFree86またはXOrgのいずれか)。gccの「最新」(咳)バージョンを使用します。 、4.9.3など。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.