-std=c++11과 -std=gnu++11, 무엇이 다를까?
GNU C++ 컴파일러인 g++는 표준 C++ 언어에 포함되지 않은 고유한 확장 기능(GNU extensions)을 제공합니다. 두 컴파일 옵션의 차이는 바로 이 확장 기능의 활성화 여부에 있습니다.
- -std=c++11: ISO C++11 표준만 엄격하게 준수하며, 표준을 위반할 가능성이 있는 GNU 확장 기능은 비활성화됩니다.
- -std=gnu++11: C++11 표준을 따르면서도, 표준을 위반하는 GNU 확장 기능까지 함께 활성화합니다.
주의할 점
다만, 표준을 위반하지 않는 확장 기능이라면 -std=c++11 옵션을 사용하더라도 여전히 적용될 수 있습니다. 즉, -std=c++11이 모든 GNU 확장을 완전히 차단하는 것은 아니라는 점에 유의해야 합니다.
GNU 확장 기능 목록 확인하기
GNU 컴파일러가 제공하는 C++ 언어 확장 기능의 전체 목록은 GCC 공식 문서에서 확인할 수 있습니다.
https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Extensions.html