-fpermissive
g ++ 컴파일러에서 플래그가 무엇을하는지 궁금합니다 . 나는 얻고있다:
오류 : 임시 [-fpermissive] 주소 가져 오기
-fpermissive
컴파일러에 플래그를 제공하여 해결할 수 있습니다 .
편집 : 임시 주소 오류 부분의 원인을 찾았습니다! 지금 바로 그 부분을 고칠 것입니다.
답변
문서 에서 바로 :
-fpermissive
부적합 코드에 대한 일부 진단을 오류에서 경고로 다운 그레이드합니다. 따라서를 사용-fpermissive
하면 일부 부적합한 코드를 컴파일 할 수 있습니다.
결론 : 당신이 무엇을하고 있는지 알지 못한다면 그것을 사용하지 마십시오 !
답변
이 -fpermissive
플래그 는 컴파일러가 실제로 오류 (일부 컴파일러에서는 허용됨)를 경고로보고하여 언어 규칙을 따르지 않는 경우에도 코드가 컴파일되도록 허용합니다. 근본적인 문제를 해결해야합니다. 문제를 보여주는 가장 작고 컴파일 가능한 코드 샘플을 게시하십시오.
-fpermissive
부적합 코드에 대한 일부 진단을 오류에서 경고로 다운 그레이드합니다. 따라서를 사용-fpermissive
하면 일부 부적합한 코드를 컴파일 할 수 있습니다.
답변
당신은 (그것을 할에 이유 충분하기 때문에 정말 잘 정의 할 수없는 행동) 언어 표준에 의해 허용되지 않는 무언가를 작성하지만에 매핑 할 일이 한 때 일부 순진에 공급하면 실행 파일의 종류 그러면 컴파일 엔진 -fpermissive
이이 오류 메시지로 중지하는 대신이를 수행합니다. 경우에 따라 프로그램이 원래 의도 한대로 정확하게 작동하지만 다른 솔루션을 사용하지 않을 특별한 이유가없는 한 반드시이 프로그램에 의존해서는 안됩니다.
답변
이에 대한 실제 사용 사례를 원한다면 gcc의 “최신”(기침) 버전을 사용하여 매우 오래된 버전의 X Windows (예 : aboout 2004의 XFree86 또는 XOrg)를 컴파일 해보십시오. , 예 : 4.9.3.
빌드 CFLAGS는 “-ansi”와 “-pedantic”을 모두 지정합니다. 이론적으로 이것은 “언어 사양을 약간이라도 위반하는 경우 폭발”을 의미합니다. 실제로, 3.x 시리즈의 gcc는 그런 종류의 것들을 많이 잡아 내지 못했고, 4.9.3으로 빌드하면 CFLAGS와 BOOTSTRAPCFLAGS를 “-fpermissive”로 설정하지 않는 한 바닥에 흡연 구멍이 남습니다.
이 플래그를 사용하면 대부분의 C 파일이 실제로 빌드되어 렉서가 생성 할 버전에 따라 달라지는 잔해로 이동할 수 있습니다. =]