g ++로 C ++ 11 컴파일 수 있습니까? (우분투

C ++ 컴파일러를 C ++ 11로 업데이트하려고합니다. 나는 비트를 검색하고 난 내가 플래그를 사용해야한다는 결론에 도달했다 -std=c++0x거나 -std=gnu++0x,하지만 난 플래그에 대한 많은 것들을 모른다. 누구든지 나를 도울 수 있습니까? (우분투 12.04를 사용하고 있습니다.)

다음은 C ++ 11 (예 : 배열)에 포함 된 라이브러리를 사용하려고 할 때 컴파일러에서 발생하는 오류입니다.

#include <array>
#include <iostream>

int main()
{
    std::array<int, 3> arr = {2, 3, 5};
    ...
}

이 파일에는 향후 ISO C ++ 표준 인 C ++ 0x에 대한 컴파일러 및 라이브러리 지원이 필요합니다. 이 지원은 현재 실험 중이며 -std = c ++ 0x 또는 -std = gnu ++ 0x 컴파일러 옵션으로 활성화해야합니다.



답변

플래그 (또는 컴파일러 옵션)는 컴파일러 실행 파일로 전달되는 일반적인 명령 줄 인수 일뿐입니다.

명령 행 (터미널)에서 g ++를 호출한다고 가정합니다.

$ g++ -std=c++11 your_file.cpp -o your_program

또는

$ g++ -std=c++0x your_file.cpp -o your_program

위의 방법으로 문제가 해결되지 않으면


답변

g++명령으로 확인할 수 있습니다 .

which g++
g++ --version

이것은 현재 어떤 컴파일러가 가리키는 지 알려줍니다.

g++4.7로 전환하려면 (시스템에 설치했다고 가정) 다음을 실행하십시오.

sudo update-alternatives --config gcc

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-4.6   60        auto mode
  1            /usr/bin/gcc-4.6   60        manual mode
* 2            /usr/bin/gcc-4.7   40        manual mode

그런 다음 선택 항목 2으로 선택하십시오 (내 기계는 이미 g++4.7을 가리 키 므로 *).

컴파일러를 전환 한 후 다시 실행 g++ --version하여 전환이 올바르게 수행되었는지 확인하십시오.

이제 프로그램을 컴파일하십시오

g++ -std=c++11 your_file.cpp -o main

답변

우분투에는 확실히 최신 버전의 g ++이 있습니다. 사용할 플래그는 -std=c++0x입니다.


답변

GNU 컴파일러 확장을 유지하려면 -std = c ++ 0x 대신 -std = gnu ++ 0x를 사용하십시오. 맨 페이지에서 인용 한 내용은 다음과 같습니다.

컴파일러는 c89 또는 c ++ 98과 같은 몇 가지 기본 표준과 gnu89 또는 gnu ++ 98과 같은 표준의 GNU 방언을 수용 할 수 있습니다. 기본 표준을 지정하면 컴파일러는 해당 표준을 따르지 않는 GNU 확장명을 사용하는 프로그램과 해당 표준을 따르는 모든 프로그램을 수락합니다. 예를 들어, -std = c89는 “asm”및 “typeof”키워드와 같이 ISO C90과 호환되지 않는 GCC의 특정 기능을 해제하지만 생략과 같이 ISO C90에서 의미가없는 다른 GNU 확장은 해제합니다. “? :”표현식의 중간 용어. 반면에 표준의 GNU 방언을 지정하면 컴파일러가 지원하는 모든 기능이 기본 표준의 의미를 변경하고 일부 엄격한 프로그램이 거부 될 수있는 경우에도 컴파일러가 지원하는 모든 기능이 활성화됩니다. 특정 표준은 -pedantic에서 표준의 해당 버전이 제공된 GNU 확장 기능을 식별하는 데 사용됩니다. 예를 들어 -std = gnu89 -pedantic은 C ++ 스타일 // 주석에 대해 경고하지만 -std = gnu99 -pedantic은 경고하지 않습니다.


답변

특정 버전의 컴파일러에서 지원되는 기능에 대한 다음 링크 를 참조 할 수 있습니다 . 컴파일러의 기능 지원에 대한 전체 목록이 있습니다. GCC는 표준을 엄격하게 따르고 다른 컴파일러보다 먼저 구현됩니다.

귀하의 질문에 관해서는 다음을 사용하여 컴파일 할 수 있습니다

  1. g++ -std=c++11 C ++ 11 용
  2. g++ -std=c++14 C ++ 14 용
  3. g++ -std=c++17 C ++ 17 용
  4. g++ -std=c++2aC ++ 20의 모든 기능이 아직 지원되지는 않지만 GCC의 기능 지원 목록 은이 링크 를 참조하십시오 .

특정 기능이 지원되기를 기다리는 경우 목록이 매우 빠르게 변경되어 목록을 주시하십시오.