Fpermisif bayrak ne işe yarar?


121

Sadece -fpermissiveg ++ derleyicisindeki bayrağın ne yaptığını merak ediyorum. Alıyorum:

hata: geçici [-fpermissive] adresini alıyor

-fpermissivederleyiciye bayrağı vererek çözebilirim .

DÜZENLEME : Geçici adres hatası kısmına neyin neden olduğunu buldum! Şimdi o kısmı düzelteceğim.

Yanıtlar:


146

Doğrudan dokümanlardan :

-fpermissive
Uyumsuz kodla ilgili bazı teşhisleri hatalardan uyarılara dönüştürün. Bu nedenle, kullanmak -fpermissivebazı uygun olmayan kodların derlenmesine izin verecektir.

Sonuç olarak: Ne yaptığınızı bilmediğiniz sürece kullanmayın !


5
En yüksek oyu alan cevaptan alıntı kılavuzundan daha fazla bilgi bekliyorum + "ne yaptığınızı öğrenene kadar kullanmayın". Bunun için google'a ihtiyacım yok. Uygun olmayan kodun hangi durumları tam olarak eski sürüme geçirilir?
johannes_lalala

Uygun olmayan kodun derecesi düşürülür, ancak teşhis hatalardan uyarılara kadardır. Soru açıcı tarafından bir örnek verilmiştir. Uç vakaların ne olabileceğini bilmiyorsanız, kullanmayı düşünmemelisiniz.
cli_hlt

2
Üzgünüm dostum, alınma ama "sonuçlarını bilmiyorsan bir şey yapma" gibi tavsiyeler önemsizdir ve her soruya uyuyor ve hiçbirini yanıtlamıyor.
johannes_lalala

3
.. ve özür dilerim, ancak kılavuzdan hiçbir ayrıntıya girmeden alıntı yapmak yardımcı olmaz. Özellikle kılavuzun çok seyrek olduğu bir durumda.
johannes_lalala

50

-fpermissiveBayrak o dil kurallarına uymayan bile derlemeye izin koduna, uyarılar olarak aslında hatalardır (ancak bazı derleyiciler tarafından izin verilen) bazı şeyleri bildirmek derleyici neden olur. Altta yatan sorunu gerçekten çözmelisiniz. Sorunu gösteren en küçük, derlenebilir kod örneğini gönderin.

-fpermissive
Uyumsuz kodla ilgili bazı teşhisleri hatalardan uyarılara dönüştürün. Bu nedenle, kullanmak -fpermissivebazı uygun olmayan kodların derlenmesine izin verecektir.


18

Eğer (bunu için bir sebep teşkil ediyor ve bu nedenle gerçekten iyi tanımlanmış edilemez davranış,) dil standardına göre izin verilmeyen bir şeyi yazılı ama eşlemek olur ettiğinizde bazı safça beslenen eğer çalıştırılabilir tür derleme motoru, -fpermissivebu hata mesajıyla durdurmak yerine tam da bunu yapacaktır. Bazı durumlarda, program tam olarak amaçladığınız gibi davranacaktır, ancak başka bir çözümü kullanmamak için çok özel bir nedeniniz yoksa kesinlikle ona güvenmemelisiniz.


3
Dil standardı tarafından izin verilmeyen bir şey hala iyi tanımlanabilir. Aslında hemen hemen her derleyicinin iyi tanımlanmış uzantıları vardır. Tüm müsamahakar örneklerinde durumun böyle olduğunu söylemiyorum
MikeMB

8

Bunun için gerçek dünya kullanım durumu istiyorsanız, X Windows'un çok eski bir sürümünü derlemeyi deneyin - örneğin, 2004 yılı civarında XFree86 veya XOrg, bölünmenin hemen çevresinde - gcc'nin "modern" (öksürük) sürümünü kullanarak 4.9.3 gibi.

CFLAGS derlemesinin hem "-ansi" hem de "-pedantic" i belirttiğini fark edeceksiniz. Teorik olarak bu, "herhangi bir şey dil spesifikasyonunu biraz ihlal ederse patlayın" anlamına gelir. Pratikte, gcc'nin 3.x serisi bu tür şeyleri pek yakalayamadı ve 4.9.3 ile inşa etmek, CFLAGS ve BOOTSTRAPCFLAGS'ı "-fpermissive" olarak ayarlamadığınız sürece yerde bir sigara deliği bırakacaktır.

Bu bayrağı kullanarak, bu C dosyalarının çoğu aslında oluşturulacak ve sizi lexer'in oluşturacağı sürüme bağlı enkaza geçme özgürlüğü bırakacaktır. =]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.