Что делает флаг fpermissive?
мне просто интересно, какого -fpermissive
флаг делает в компиляторе g++? Я получаю:
ошибка: принимая адрес временного [- fpermissive]
который я могу решить, дав -fpermissive
флаг для компилятора.
редактировать: Я только что нашел, что вызвало временную часть ошибки адреса! Я собираюсь исправить это прямо сейчас.
4 ответов
С документы:
-fpermissive
Опускать диагностику код nonconformant от ошибок до предупреждений. Таким образом, используя-fpermissive
позволит скомпилировать некоторый несоответствующий код.
итог: не используйте если вы не знаете, что вы делаете!
на -fpermissive
флаг заставляет компилятор сообщать о некоторых вещах, которые на самом деле являются ошибками (но разрешены некоторыми компиляторами) в качестве предупреждений, чтобы позволить коду компилироваться, даже если он не соответствует правилам языка. Вы действительно должны исправить основную проблему. Опубликуйте наименьший образец компилируемого кода, демонстрирующий проблему.
-fpermissive
Опускать диагностику код nonconformant от ошибок до предупреждений. Таким образом, используя-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 будут фактически построены, оставляя вам возможность перейти к зависящим от версии обломкам, которые будет генерировать лексер. =]