본문 바로가기

C++ (learncpp)/Introduction - Getting Started

0.12 — Configuring your compiler: Choosing a language standard

C++의 다양한 버전(C++98, C++03, C++11, C++14, C++17, C++20 등)을 사용할 수 있으므로 컴파일러는 어떤 버전을 사용해야 하는지 어떻게 알 수 있습니까? ? 일반적으로 컴파일러는 기본적으로 사용할 표준을 선택합니다(일반적으로 가장 최근의 언어 표준이 아님).

다른 언어 표준을 사용하고 싶다면(아마 그렇게 할 것입니다), 그렇게 하도록 IDE/컴파일러를 구성해야 합니다.

 

진행 중인 언어 표준에 대한 코드 이름 (Code names for in-progress language standards)

완성된 언어 표준은 완성된 연도의 이름을 따서 명명되었습니다(예: C++17은 2017년에 완성됨).

그러나 새로운 언어 표준이 합의될 때 최종 결정이 몇 년도에 이루어질지는 미지수입니다. 결과적으로 진행 중인 언어 표준에는 코드 이름이 부여되고 표준이 완성되면 실제 이름으로 대체됩니다. 예를 들어, C++11은 작업하는 동안 C++1x로 불렸습니다. 여전히 장소에서 사용되는 코드 이름을 볼 수 있습니다(특히 아직 최종 이름이 없는 언어 표준의 향후 버전).

 

다음은 최종 이름에 대한 코드 이름의 매핑입니다.

 

  • c++1x = C++11
  • c++1y = C++14
  • c++1z = C++17
  • c++2a = C++20
  • c++2b = C++23

예를 들어, C++1z가 표시되면 이는 C++17 언어 표준과 동의어입니다.

 

어떤 언어 표준을 선택해야 합니까? (Which language standard should you choose?)

전문적인 환경에서는 최신 표준에서 한 두 가지 버전의 언어 표준을 선택하는 것이 일반적입니다. 이는 일반적으로 컴파일러 제조업체가 결함을 해결할 기회를 갖고 새로운 기능에 대한 모범 사례를 잘 이해할 수 있도록 하기 위해 수행됩니다. 관련이 있는 경우 일부 플랫폼의 컴파일러는 최신 언어 표준에 대한 완전한 지원을 즉시 제공하지 않을 수 있으므로 이는 또한 플랫폼 간 호환성을 향상시키는 데 도움이 됩니다.

개인 프로젝트의 경우와 학습하는 동안 최신 최종 표준(작성 시점, 현재 C++20)을 선택하는 데 약간의 단점이 있습니다.

 

저자의 메모 (Author’s note)

이 웹 사이트는 현재 C++17 표준을 대상으로 합니다. 즉, 강의와 예제에서는 컴파일러가 C++17을 사용할 수 있다고 가정합니다. 일부 C++20 콘텐츠는 C++20 호환 컴파일러가 있는 경우 선택적으로 사용할 수 있습니다.

모든 강의 내용을 최대한 활용하려면 컴파일러에서 지원하는 경우 C++20 언어 표준을 사용하는 것이 좋습니다. C++17 언어 표준을 사용하는 것도 좋은 경험을 제공할 것입니다.

컴파일러가 C++17을 지원하지 않는 경우 지원하는 것으로 업그레이드하는 것이 좋습니다. 어떤 이유로 이것이 가능하지 않은 경우 일부 최신 콘텐츠를 건너뛰고 일부 예제를 수정하여 컴파일해야 합니다. 이것은 전체 경험에 너무 큰 영향을 미치지 않아야 합니다(특히 초기 수업에서).

C++14는 이 사이트에서 적절한 경험을 위한 최소 언어 표준입니다.

 

이 강의 끝에 C++17을 올바르게 사용하도록 컴파일러를 설정했는지 테스트하는 데 사용할 수 있는 예제가 있습니다.

 

Visual Studio에서 언어 표준 설정 (Setting a language standard in Visual Studio)

작성 당시 Visual Studio 2019는 C++14 기능을 기본으로 하며, 이는 C++17 및 C++20에 도입된 새로운 기능의 사용을 허용하지 않습니다.

이러한 새로운 기능을 사용하려면 새로운 언어 표준을 활성화해야 합니다. 불행히도 현재 전역적으로 이 작업을 수행할 수 있는 방법은 없습니다. 프로젝트별로 수행해야 합니다.

 

경고 (Warning)

Visual Studio를 사용하면 새 프로젝트를 만들 때마다 언어 표준을 다시 선택해야 합니다.

 

언어 표준을 선택하려면 프로젝트를 연 다음 프로젝트 메뉴 > (애플리케이션의 이름) 속성으로 이동한 다음 구성 속성 > C/C++ > 언어를 엽니다.

 

 

여기에서 C++ 언어 표준을 사용하려는 C++ 버전으로 설정할 수 있습니다.

 

팁 (Tip)

작성 당시 C++20 지원을 위한 설정인 최신 표준 "ISO C++ 최신(/std:c++latest)"을 선택하는 것이 좋습니다.
관련 컨텐츠 (Related Content)

Visual Studio 언어 표준 설정에 대한 자세한 내용은 Microsoft에 Visual Studio 언어 표준 참조 문서가 있습니다.

 

Code::Blocks에서 언어 표준 설정 (Setting a language standard in Code::Blocks)

Code::Blocks는 기본적으로 C++11 이전 언어 표준으로 설정될 수 있습니다. 더 현대적인 언어 표준이 활성화되어 있는지 확인하고 확인하고 싶을 것입니다.

좋은 소식은 Code::Blocks를 사용하면 언어 표준을 전역적으로 설정할 수 있으므로 프로젝트별로가 아니라 한 번만 설정할 수 있다는 것입니다. 이렇게 하려면 설정 메뉴 > 컴파일러...로 이동합니다.

 

 

그런 다음 Have g++라고 표시된 확인란을 C++XX ISO C++ 언어 표준 [-std=c++XX]을 따릅니다. 여기서 XX는 언어 표준을 나타내는 숫자(예: 20, 17 등)입니다.

 

 

 

 

팁 (Tip)

이 목록에 C++20 또는 C++17이 표시되면 최신 ISO 표준을 나타내는 항목을 선택합니다(예: g++에서 C++20 ISO 언어 표준을 따르도록 선택). 이 목록에 GNU 표준도 보이면 무시하십시오.

 

이 목록에 C++20 또는 C++17이 표시되지 않으면 최신 버전의 Code::Blocks로 업그레이드하세요.

어떤 이유로 최신 버전으로 업그레이드할 수 없는 경우 Code::Blocks 버전이 C++의 차기(또는 방금 출시된) 버전을 지원하고 있을 수 있습니다. 그렇다면 다음 C++XX(일명 C++YY) ISO C++ 언어 표준 [-std=c++XX]을 따르도록 g++ 레이블이 지정됩니다(위의 파란색 상자 참조). 이 목록에서 최신 버전을 선택하십시오.

g++에서 언어 표준 설정 (Setting a language standard in g++)

 

GCC/G++ 사용자용 (For GCC/G++ users)

GCC/G++의 경우 컴파일러 플래그 -std=c++11, -std=c++14, -std=c++17 또는 -std=c++2a를 전달하여 C++11/14를 활성화할 수 있습니다. /17/2a를 각각 지원합니다.

 

컴파일러에서 C++17 호환성 테스트 (Testing your compiler for C++17 compatibility)

C++17 언어 표준(또는 그 이상)을 활성화하면 경고나 오류 없이 다음 코드를 컴파일할 수 있습니다.

 

#include <array>
#include <iostream>
#include <string_view>
#include <tuple>
#include <type_traits>

namespace a::b::c
{
    inline constexpr std::string_view str{ "hello" };
}

template <class... T>
std::tuple<std::size_t, std::common_type_t<T...>> sum(T... args)
{
    return { sizeof...(T), (args + ...) };
}

int main()
{
    auto [iNumbers, iSum]{ sum(1, 2, 3) };
    std::cout << a::b::c::str << ' ' << iNumbers << ' ' << iSum << '\n';

    std::array arr{ 1, 2, 3 };

    std::cout << std::size(arr) << '\n';

    return 0;
}

 

이 코드를 컴파일할 수 없다면 C++17을 활성화하지 않았거나 컴파일러가 C++17을 완전히 지원하지 않는 것입니다. 후자의 경우 0.6 단원 -- IDE(통합 개발 환경) 설치에 설명된 대로 최신 버전의 IDE/컴파일러를 설치하십시오.

구성 내보내기 (Exporting your configuration)

새 프로젝트를 만들 때마다 모든 설정 옵션을 다시 선택해야 하는 것은 부담스럽습니다. 다행히 대부분의 IDE는 설정을 내보내는 방법을 제공합니다. 이는 일반적으로 원하는 설정으로 새 프로젝트 템플릿을 만든 다음 새 프로젝트를 만들 때 해당 프로젝트 템플릿을 선택하여 수행됩니다.

 

Visual Studio 사용자의 경우 (For Visual Studio users)

Visual Studio에서 이 옵션은 프로젝트 -> 템플릿 내보내기를 통해 사용할 수 있습니다. "프로젝트 템플릿"을 선택하고 이름과 선택적 설명(예: C++20 콘솔 응용 프로그램)을 추가한 다음 "마침"을 클릭합니다.

다음에 새 프로젝트를 만들 때 이 템플릿이 프로젝트 템플릿 목록에 표시되는 것을 볼 수 있습니다.

 

코드 블록 사용자 (For Code::Blocks users)

Code::Blocks에서 파일 -> 프로젝트를 템플릿으로 저장을 선택합니다. 템플릿에 제목을 지정하고 저장합니다.

새 프로젝트를 만들 때 "사용자 템플릿" 옵션에서 이 템플릿을 찾을 수 있습니다.

reference : https://www.learncpp.com/cpp-tutorial/configuring-your-compiler-choosing-a-language-standard/