Что делает флаг fpermissive?
мне просто интересно, какого -fpermissive
флаг делает в компиляторе g++? Я получаю:
ошибка: принимая адрес временного [- fpermissive]
что я могу решить, давая -fpermissive
флаг для компилятора.
EDIT: Я только что нашел то, что вызывало временную часть ошибки адреса! Я собираюсь исправить это прямо сейчас.
4 ответа:
С документы:
-fpermissive
Понизьте некоторые диагностики о несоответствующем коде от ошибок до предупреждений. Таким образом, используя-fpermissive
позволит скомпилировать некоторый несоответствующий код.итог: не используйте если вы не знаете, что вы делаете!
The
-fpermissive
флаг заставляет компилятор сообщать о некоторых вещах, которые на самом деле являются ошибками (но разрешены некоторыми компиляторами) в качестве предупреждений, чтобы разрешить компиляцию кода, даже если он не соответствует правилам языка. Вы действительно должны исправить основную проблему. Опубликуйте самый маленький, компилируемый пример кода, который демонстрирует проблему.
-fpermissive
Понизьте некоторые диагностики о несоответствующем коде от ошибок до предупреждений. Таким образом, используя-fpermissive
позволит скомпилировать некоторый несоответствующий код.
когда вы написали что-то, что не разрешено стандартом языка (и поэтому не может быть четко определенным поведением, что является достаточной причиной, чтобы не делать этого), но происходит сопоставление с некоторые вид исполняемого файла, если он наивно подается в компилятор, то
-fpermissive
будет делать только это вместо остановки с этим сообщением об ошибке. В некоторых случаях программа будет вести себя именно так, как вы изначально предполагали, но вы определенно не должны полагаться на нее, если у вас нет некоторых очень особая причина не использовать какое-то другое решение.
Если вам нужен реальный случай использования для этого, попробуйте скомпилировать очень старую версию X Windows-скажем, XFree86 или XOrg из aboout 2004, прямо вокруг разделения-используя "современную" (кашляющую) версию gcc, такую как 4.9.3.
вы заметите, что CFLAGS сборки указывают как "- ansi", так и "- pedantic". Теоретически это означает "взорваться, если что-то даже слегка нарушает спецификацию языка". На практике, 3.X серия gcc не поймала очень много такого рода вещей, и строительство он с 4.9.3 оставит дымящуюся дыру в земле, если вы не установите CFLAGS и BOOTSTRAPCFLAGS в "- fpermissive".
используя этот флаг, Большинство этих файлов C будут фактически построены, оставляя вам возможность перейти к зависящим от версии обломкам, которые будет генерировать лексер. =]