Saya hanya ingin tahu apa yang dilakukan -fpermissive
flag pada kompiler g ++? Saya mendapatkan:
error: mengambil alamat sementara [-fpermissive]
yang bisa saya selesaikan dengan memberikan -fpermissive
bendera ke kompiler.
EDIT : Saya baru saja menemukan apa yang menyebabkan bagian kesalahan alamat sementara! Saya akan memperbaiki bagian itu sekarang.
c++
gcc
compiler-options
mmirzadeh.dll
sumber
sumber
The
-fpermissive
flag menyebabkan compiler untuk melaporkan beberapa hal yang sebenarnya kesalahan (tapi diizinkan oleh beberapa kompiler) sebagai peringatan, kode izin untuk mengkompilasi bahkan jika itu tidak sesuai dengan aturan bahasa. Anda benar-benar harus memperbaiki masalah yang mendasarinya. Posting contoh kode terkecil yang dapat dikompilasi yang menunjukkan masalah tersebut.sumber
Ketika Anda telah menulis sesuatu yang tidak diperbolehkan oleh standar bahasa (dan karena itu tidak dapat benar-benar merupakan perilaku yang terdefinisi dengan baik, yang merupakan alasan yang cukup untuk tidak melakukannya) tetapi kebetulan memetakan ke beberapa jenis yang dapat dieksekusi jika diberi makan secara naif mesin kompilasi, kemudian
-fpermissive
akan melakukan hal itu alih-alih berhenti dengan pesan kesalahan ini. Dalam beberapa kasus, program kemudian akan berperilaku persis seperti yang Anda inginkan, tetapi Anda tidak boleh mengandalkannya kecuali Anda memiliki alasan yang sangat khusus untuk tidak menggunakan solusi lain.sumber
Jika Anda menginginkan kasus penggunaan dunia nyata untuk ini, coba kompilasi versi X Windows yang sangat lama-- katakanlah, XFree86 atau XOrg dari sekitar tahun 2004, tepat di sekitar-- menggunakan versi gcc "modern" (batuk) , seperti 4.9.3.
Anda akan melihat CFLAGS build menentukan "-ansi" dan "-pedantic". Secara teori, ini berarti, "meledak jika ada yang melanggar spesifikasi bahasa". Dalam praktiknya, seri 3.x dari gcc tidak menangkap banyak hal semacam itu, dan membangunnya dengan 4.9.3 akan meninggalkan lubang berasap di tanah kecuali Anda menyetel CFLAGS dan BOOTSTRAPCFLAGS ke "-fpermissive".
Dengan menggunakan flag tersebut, sebagian besar file C tersebut akan benar-benar dibuat, sehingga Anda bebas untuk beralih ke reruntuhan yang bergantung pada versi yang akan dihasilkan oleh lexer. =]
sumber