g++ 컴파일할때 -std=c++11 옵션을 안넣어주면 디폴트로 -std=c++0x 가 들어가는건가요?

oblab의 이미지

g++ 컴파일할때 -std=c++11 옵션을 안넣어주면 디폴트로 -std=c++0x 가 들어가는건가요?

a.cpp 파일을 컴파일할때

1) g++ a.cpp -std=c++11
2) g++ a.cpp

1, 2번을 비교했을때 2번으로 컴파일하면 std옵션을 기본으로 어떻게 설정이 되는가요? c++0x인건가요?

twinwings의 이미지

gcc 버전(혹은 리눅스 배포판)에 따라서 std 기본값이 달라요.

g++의 경우 우분투 14.04의 경우 c++99, 16.04의 경우 c++11 일겁니다.

 의 이미지

좀 더 정확하게 말하면

gcc 5.x부터 -std=gnu89 대신 -std=gnu11이 디폴트이며 (https://gcc.gnu.org/gcc-5/changes.html)
g++ 6.x부터 -std=gnu++98 대신 -std=gnu++14이 디폴트가 됩니다. (https://gcc.gnu.org/gcc-6/changes.html)

gnu11이나 gnu++14는 표준 c11, c++14 등과 약간 다른데, 그 점에 대해서는 gcc/g++ 매뉴얼 참조하세요.

bushi의 이미지

GCC 6.3.0 의 g++ 에선 gnu++14 (c++14 및 각종 GCC extension) https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gcc/Standards.html#Standards
GCC 5.4.0 의 g++ 에선 gnu++98 (c++98 및 각종 GCC extension) https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gcc/Standards.html#Standards
GCC 4.9.4 의 g++ 에선 gnu++98 (c++98 및 각종 GCC extension) https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Standards.html#Standards
배포본마다 다른지는 확인하기 어려우니, g++ -dumpspecs 의 결과 중에 -std 옵션의 기본값을 바꾸는게 있는지 직접 살펴보세요.
예를 들면 %{!std:-std=c++11} 같은 것.
또는 컴파일러를 실행시켜 몇가지 macro 를 직접 확인하셔도 됩니다.

$ echo | gcc -x c++ -E -dM - | grep "STRICT_ANSI\|__cplusplus"
#define __cplusplus 201402L
 
$ gcc --version
gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1)
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
$ lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID:	Fedora
Description:	Fedora release 25 (Twenty Five)
Release:	25
Codename:	TwentyFive

Fedora 25 의 GCC 6.3.1 에 포함된 g++ 은 기본값으로 -std=gnu++14 을 사용합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.