Zastanawiam się tylko, co -fpermissive
robi flaga w kompilatorze g ++? Staje się:
błąd: przyjmowanie adresu tymczasowego [-fdopuszczalne]
które mogę rozwiązać, podając -fpermissive
flagę kompilatorowi.
EDYCJA : Właśnie znalazłem, co powoduje tymczasową część błędu adresu! Teraz naprawię tę część.
c++
gcc
compiler-options
mmirzadeh
źródło
źródło
-fpermissive
Flaga powoduje kompilator zgłosić pewne rzeczy, które są rzeczywiście błędy (ale są dopuszczone przez niektóre kompilatory) jako ostrzeżenia, aby kod zezwolenia skompilować nawet jeśli nie jest ona zgodna z zasadami językowymi. Naprawdę powinieneś naprawić podstawowy problem. Opublikuj najmniejszą, możliwą do kompilacji próbkę kodu, która demonstruje problem.źródło
Kiedy napisałeś coś, co nie jest dozwolone przez standard językowy (i dlatego nie może być dobrze zdefiniowanym zachowaniem, co jest wystarczającym powodem, aby tego nie robić), ale zdarza się, że mapujesz na jakiś plik wykonywalny, jeśli naiwnie silnik kompilujący
-fpermissive
zrobi to zamiast zatrzymywać się z tym komunikatem o błędzie. W niektórych przypadkach program będzie zachowywał się dokładnie tak, jak pierwotnie zamierzałeś, ale zdecydowanie nie powinieneś na nim polegać, chyba że masz bardzo szczególny powód, aby nie używać innego rozwiązania.źródło
Jeśli potrzebujesz rzeczywistego przypadku użycia do tego, spróbuj skompilować bardzo starą wersję X Windows - powiedzmy, XFree86 lub XOrg z około 2004 roku, tuż obok podziału - używając "nowoczesnej" (kaszlącej) wersji gcc , takie jak 4.9.3.
Zauważysz, że kompilacja CFLAGS zawiera zarówno „-ansi”, jak i „-pedantic”. W teorii oznacza to „wysadzić, jeśli cokolwiek choćby nieznacznie narusza specyfikację języka”. W praktyce seria 3.x gcc nie złapała zbyt wiele tego typu rzeczy, a zbudowanie jej za pomocą 4.9.3 pozostawi dymiącą dziurę w ziemi, chyba że ustawisz CFLAGS i BOOTSTRAPCFLAGS na „-fpermissive”.
Używając tej flagi, większość tych plików C faktycznie się zbuduje, pozostawiając ci swobodę przejścia do wraku zależnego od wersji, który wygeneruje lekser. =]
źródło