138

-fpermissiveg ++コンパイラでフラグが何をするのか疑問に思っていますか? 私は得ています:

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

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

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

4

5 に答える 5

163

ドキュメントから右:

-fpermissive
非準拠コードに関する一部の診断をエラーから警告に格下げします。したがって、 を使用-fpermissiveすると、一部の非準拠コードがコンパイルされる可能性があります。

結論:自分が何をしているのかを理解していない限り、使用しないでください!

于 2012-01-12T23:24:53.407 に答える
62

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

-fpermissive
非準拠コードに関する一部の診断をエラーから警告に格下げします。したがって、 を使用-fpermissiveすると、一部の非準拠コードがコンパイルされる可能性があります。

于 2012-01-12T23:24:30.600 に答える
20

言語標準で許可されていないものを作成した場合 (したがって、実際には明確に定義された動作になることはできません。これは、それを実行しない十分な理由です) が、素朴にフィードされた場合に何らかの実行可能ファイルにマップされる場合コンパイル エンジンは、-fpermissiveこのエラー メッセージで停止する代わりに、それを実行します。場合によっては、プログラムは最初に意図したとおりに動作しますが、他のソリューションを使用しないという非常に特別な理由がない限り、これに頼るべきではありません。

于 2012-01-12T23:32:39.000 に答える
15

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

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

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

于 2016-07-29T05:14:44.817 に答える