fpermissive 플래그는 무엇을합니까?


121

-fpermissiveg ++ 컴파일러에서 플래그가 무엇을하는지 궁금합니다 . 나는 얻고있다:

오류 : 임시 [-fpermissive] 주소 가져 오기

-fpermissive컴파일러에 플래그를 제공하여 해결할 수 있습니다 .

편집 : 임시 주소 오류 부분의 원인을 찾았습니다! 지금 바로 그 부분을 고칠 것입니다.

답변:


146

문서 에서 바로 :

-fpermissive
부적합 코드에 대한 일부 진단을 오류에서 경고로 다운 그레이드합니다. 따라서를 사용 -fpermissive하면 일부 부적합한 코드를 컴파일 할 수 있습니다.

결론 : 당신이 무엇을하고 있는지 알지 못한다면 그것을 사용하지 마십시오 !


5
가장 많이 득표 한 답변에서 인용 매뉴얼 + "당신이 무엇을하고 있는지 알 때까지 사용하지 마십시오"보다 더 많은 정보를 기대합니다. 나는 이것을 위해 구글 할 필요가 없다. 부적합 코드의 어떤 경우가 정확히 다운 그레이드됩니까?
johannes_lalala

부적합 코드는 다운 그레이드되지만 진단은 오류에서 경고로 이루어집니다. 질문 시작자가 한 예입니다. 엣지 케이스가 무엇인지 모르는 경우 사용을 고려하지 마십시오.
cli_hlt

2
죄송합니다. 불쾌하지 않습니다.하지만 "의미를 모를 경우 아무것도하지 마십시오"와 같은 충고는 사소하고 모든 질문에 적합하며 아무 대답도하지 않습니다.
johannes_lalala

3
.. 그리고 미안하지만, 아무 것도 설명하지 않고 매뉴얼을 인용하는 것은 도움이되지 않습니다. 특히 설명서가 매우 드문 경우.
johannes_lalala

50

-fpermissive플래그 는 컴파일러가 실제로 오류 (일부 컴파일러에서는 허용됨)를 경고로보고하여 언어 규칙을 따르지 않는 경우에도 코드가 컴파일되도록 허용합니다. 근본적인 문제를 해결해야합니다. 문제를 보여주는 가장 작고 컴파일 가능한 코드 샘플을 게시하십시오.

-fpermissive
부적합 코드에 대한 일부 진단을 오류에서 경고로 다운 그레이드합니다. 따라서를 사용 -fpermissive하면 일부 부적합한 코드를 컴파일 할 수 있습니다.


18

당신은 (그것을 할에 이유 충분하기 때문에 정말 잘 정의 할 수없는 행동) 언어 표준에 의해 허용되지 않는 무언가를 작성하지만에 매핑 할 일이 한 때 일부 순진에 공급하면 실행 파일의 종류 그러면 컴파일 엔진 -fpermissive이이 오류 메시지로 중지하는 대신이를 수행합니다. 경우에 따라 프로그램이 원래 의도 한대로 정확하게 작동하지만 다른 솔루션을 사용하지 않을 특별한 이유가없는 한 반드시이 프로그램에 의존해서는 안됩니다.


3
언어 표준에서 허용하지 않는 것은 여전히 ​​잘 정의 될 수 있습니다. 사실 거의 모든 컴파일러에는 잘 정의 된 확장이 있습니다. 이 허용하지만의 모든 인스턴스와의 경우 말을하지
MikeMB

8

이에 대한 실제 사용 사례를 원한다면 gcc의 "최신"(기침) 버전을 사용하여 매우 오래된 버전의 X Windows (예 : aboout 2004의 XFree86 또는 XOrg)를 컴파일 해보십시오. , 예 : 4.9.3.

빌드 CFLAGS는 "-ansi"와 "-pedantic"을 모두 지정합니다. 이론적으로 이것은 "언어 사양을 약간이라도 위반하는 경우 폭발"을 의미합니다. 실제로, 3.x 시리즈의 gcc는 그런 종류의 것들을 많이 잡아 내지 못했고, 4.9.3으로 빌드하면 CFLAGS와 BOOTSTRAPCFLAGS를 "-fpermissive"로 설정하지 않는 한 바닥에 흡연 구멍이 남습니다.

이 플래그를 사용하면 대부분의 C 파일이 실제로 빌드되어 렉서가 생성 할 버전에 따라 달라지는 잔해로 이동할 수 있습니다. =]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.