Wat doet de fpermissieve vlag?

Ik vraag me af wat de vlag -fpermissivedoet in de g++-compiler? Ik krijg:

fout: adres aannemen van tijdelijke [-fpermissive]

die ik kan oplossen door de vlag -fpermissiveaan de compiler te geven.

BEWERKEN:
Ik heb net gevonden wat de tijdelijke adresfout veroorzaakte! Ik ga dat onderdeel nu repareren.


Antwoord 1, autoriteit 100%

Rechtstreeks van de documenten:

-fpermissive
Downgrade sommige diagnostische gegevens over niet-conforme code van fouten naar waarschuwingen.
Dus, door -fpermissivete gebruiken, kan een aantal niet-conforme code worden gecompileerd.

Kortom: gebruik het niettenzij je weet wat je doet!


Antwoord 2, autoriteit 36%

De -fpermissiveflagzorgt ervoor dat de compiler sommige dingen rapporteert die eigenlijk fouten zijn (maar door sommige compilers zijn toegestaan) als waarschuwingen, zodat code kan worden gecompileerd, zelfs als deze niet in overeenstemming is met de taal reglement. Je moet echt het onderliggende probleem oplossen. Post het kleinste, compileerbare codevoorbeeld dat het probleem aantoont.

-fpermissive
Downgrade sommige diagnostische gegevens over niet-conforme code van fouten naar waarschuwingen.
Dus, door -fpermissivete gebruiken, kan een aantal niet-conforme code worden gecompileerd.


Antwoord 3, autoriteit 13%

Wanneer u iets hebt geschreven dat niet is toegestaan ​​door de taalstandaard (en daarom niet echt goed gedefinieerd gedrag kan zijn, wat reden genoeg is om het niet te doen) maar toevallig naar wat Soort uitvoerbaar gebruik Als ze naïvisch worden gevoed naar de compileermotor, dan zal -fpermissiveprecies dat doen in plaats van te stoppen met dit foutbericht. In sommige gevallen gedraagt ​​het programma dan precies zoals u oorspronkelijk was bedoeld, maar u zou er absoluut niet op moeten vertrouwen, tenzij u een aantal zeer speciale reden hebt om een ​​andere oplossing niet te gebruiken.


Antwoord 4, Autoriteit 8%

Als u hiervoor een gebruik van real-world wilt gebruiken, probeer dan een zeer oude versie van X Windows te compileren – Zeg, ofwel XFree86 of Xorg uit Aboout 2004, meteen rond de splitsing – met behulp van een “moderne” (hoest) versie van GCC, zoals 4.9.3.

U zult opmerken dat de build CFLAG’s zowel “-ansi” als “-pedantic” specificeren. In theorie betekent dit: “Blow Up als iets zelfs de taal specificeert”. In de praktijk vangde de 3.x-serie van GCC niet veel van dat soort dingen, en het bouwen van het met 4.9.3 laat een rookgat in de grond achter, tenzij je cflags en bootstrapcflags instelt naar “-Fpermissive”.

Met die vlag zullen de meeste van die C-bestanden daadwerkelijk bouwen, waardoor u vrij laat om verder te gaan naar het versafhankelijke wrak van de lexer zal genereren. =]


Antwoord 5

Een gemeenschappelijk geval voor het eenvoudig instellen van -Fpermissive en niet zweten het bestaat: de grondig geteste en werkende bibliotheek van derden die niet compileert op nieuwere compilerversies zonder -Fpermissive. Deze bibliotheken bestaan ​​en zijn zeer waarschijnlijk niet het probleem van de toepassing ontwikkelaar om op te lossen, noch in het schemabudget van de ontwikkelaar om het te doen.

-Fpermissive en ga in dat geval verder.

Other episodes