G ++コンパイラで-fpermissive
フラグが何をしているのだろうか?私は得ています:
エラー:一時的なアドレスを取得[-fpermissive]
-fpermissive
フラグをコンパイラに渡すことで解決できます。
EDIT:一時的なアドレスエラー部分の原因を見つけました!今からその部分を修正します。
ドキュメント から:
-fpermissive
不適合コードに関するいくつかの診断をエラーから警告にダウングレードします。したがって、-fpermissive
を使用すると、一部の不適合コードをコンパイルできます。
結論:何をしているのかわからない限り、使用しないでください!
-fpermissive
flag を指定すると、コンパイラーは、実際にはエラー(ただし一部のコンパイラーでは許可されている)であるものを警告として報告し、言語規則に準拠していない場合でもコードをコンパイルできるようにします。根本的な問題を本当に修正する必要があります。問題を示す最小のコンパイル可能なコードサンプルを投稿します。
-fpermissive
不適合コードに関するいくつかの診断をエラーから警告にダウングレードします。したがって、-fpermissive
を使用すると、一部の不適合コードをコンパイルできます。
言語標準で許可されていない(したがって、実際には明確に定義された振る舞いをすることができないため、それを行わないのに十分な理由である)何かを書いたが、たまたまsomeコンパイルエンジンに単純に供給された場合、実行可能ファイルの種類は、-fpermissive
がこのエラーメッセージで停止する代わりにそれを実行します。場合によっては、プログラムは当初意図したとおりに動作しますが、他のソリューションを使用しない特別な理由がない限り、絶対に依存しないでください。
実際のユースケースが必要な場合は、gccの「モダン」(咳)バージョンを使用して、非常に古いバージョンのX Windowsをコンパイルしてみてください(たとえば、2004年のXFree86またはXOrgのいずれか)。 、4.9.3など。
ビルドCFLAGSで「-ansi」と「-pedantic」の両方が指定されていることに気付くでしょう。理論的には、これは「言語仕様に少しでも違反するものがあれば爆発する」ことを意味します。実際には、3.xシリーズのgccはそのようなものをあまりキャッチしませんでした。4.9.3でビルドすると、CFLAGSとBOOTSTRAPCFLAGSを "-fpermissive"に設定しない限り、地面に喫煙穴が残ります。
そのフラグを使用すると、これらのCファイルのほとんどが実際にビルドされ、レクサーが生成するバージョン依存の残骸に自由に移動できます。 =]