-std = c ++ 11과 -std = gnu ++ 11의 차이점은 무엇입니까?


132

의 차이점은 무엇입니까 -std=c++11-std=gnu++11GCC와 그 소리에 대한 컴파일 매개 변수는? 와 같은 질문 c99gnu99? C ++ 및 C 표준에 대해 알고 있으며 관심있는 매개 변수의 차이점입니다.

나는 그것이 어떤 확장과 관련이 있는지 어딘가 읽었지만 새 프로젝트를 위해 어느 것을 선택하고 어떻게 선택할 것인지 명확하지 않습니다.


5
gnu사람은 확장을 참조 않으며, 당신은 휴대용 코드를 작성하려는 경우는 모두 표준 및 피하기 확장에 충실해야한다.
juanchopanza

답변:


91

스스로 알게 된 것처럼 두 옵션의 차이점은 C ++ 표준을 위반 / 확장하는 GNU 확장이 활성화되어 있는지 여부입니다. GNU C ++ 확장은 여기 에 설명되어 있습니다 . C ++ 프로그램에서 대부분의 GNU C 확장 ( 여기 에서 설명 )을 사용할 수도 있습니다 . 여기 에서 -WpedanticGCC 옵션 에 대해 읽는 것도 유용합니다 .

일부 확장은 -std=c++11표준을 위반하지 않는 한을 사용할 때 여전히 유효 할 수 있습니다 . 예를 들어 MinGW 컴파일러를 사용할 때 working 확장을 필요로합니다 Boost.Lexical_Cast. 그러나 어떤 것도 사용하지 않는 한 최대한의 휴대 성을 위해 확장 기능을 사용하지 않고 표준을 고수하는 것이 좋습니다. 컴파일러를 변경 해야하는 경우 유용합니다.


4
예, 표준에 의해 구체적으로 정의되지 않은 작업을 권장하지 않기 때문에 확장을 피합니다.하지만 "확장하다"는 많은 확장이있을 때 Standardese를 사용하는 이상하고로드 된 용어입니다 , 그냥 구현 정의 또는 표준이 침묵 하는 것 또는 아마도 모든 확장을 지정하는 것 ... 표준이 명시 적으로 정의한 것과 다른 것을 수행하여 표준을 위반하는 GNU 확장에 대한 인용이 있습니까?
underscore_d

9
이 답변은 일반적으로 좋은 대답이지만 적어도 활성화 gnu11되었지만 활성화 되지 않은 확장명을 나열하도록 편집하는 것이 좋습니다 c++11. 당신이 링크 된 목록은 모든 확장의, 그리고 당신 자신을 표시로 그들 중 일부는 함께 사용할 수 있습니다 c++11뿐만 아니라 (같은 __restrict__).
einpoklum 8

내가 지금 발견하고 플래그의 문서를보고 결코 결론을 내리지 않은 것은 다음과 같습니다. -std alltogether를 생략 할 때
Daniel82
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.