What's the point of including -std=c++0x in a G++ compile command?

后端 未结 3 1136
失恋的感觉
失恋的感觉 2021-01-15 02:16

I have recently started learning C++ and, since I\'m on Linux, I\'m compiling using G++.

Now, the tutorial I\'m following says

If you happen t

相关标签:
3条回答
  • 2021-01-15 02:53

    Source for your reference:

    main.cpp

    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout << "Test main CPP" << endl;
        return 0;
    }
    

    build.sh

    rm demoASI*
    echo "**cleaned !!**"
    
    ##### C++ 11 Compliance #####
    # type ONE
    g++ -o demoASI_1 -std=c++0x main.cpp
    echo "**rebuild-main-done (C++ 11 Compilation) !**"
    
    # type TWO
    g++ -o demoASI_2 -std=c++11 main.cpp
    echo "**rebuild-main-done (C++ 11 Compilation) !**"
    
    ##### C++ 11+ Compliance #####
    # type THREE
    g++ -o demoASI_3 -std=c++1y main.cpp
    echo "**rebuild-main-done (C++ 11+ (i.e. 1y, but not C++14) Compilation) !**"
    
    ###### C++ 14 Compliance  ######
    # type FOUR
    g++ -o demoASI_4 -std=c++14 main.cpp
    if [ $? -eq 0 ]
    then
        echo "**rebuild-main-done (C++ 14 Compilation) !** :: SUCCESS"
    else
        echo "**rebuild-main-done (C++ 14 Compilation) !** :: FAILED"
    fi
    

    Now, execute the script as; ./build.sh (assuming build.sh has execution permission)

    You can first check the version of your g++ compiler, as;

    g++ --version

    The version of g++, after 4.3, has support for the c++11.

    Please see, for c++14 support info in compiler.

    0 讨论(0)
  • 2021-01-15 03:13

    By default, GCC compiles C++-code for gnu++98, which is a fancy way of saying the C++98 standard plus lots of gnu extenstions.

    You use -std=??? to say to the compiler what standard it should follow.
    Don't omit -pedantic though, or it will squint on standards-conformance.

    The options you could choose:

    standard          with gnu extensions
    
    c++98             gnu++98
    c++03             gnu++03
    c++11 (c++0x)     gnu++11 (gnu++0x)
    c++14 (c++1y)     gnu++14 (gnu++1y)
    

    Coming up:

    c++1z             gnu++1z (Planned for release sometime in 2017, might even make it.)
    

    GCC manual: https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Standards.html#Standards

    Also, ask for full warnings, so add -Wall -Wextra.

    There are preprocessor-defines for making the library include additional checks:

    • _GLIBCXX_CONCEPT_CHECKS to add additional compile-time-checks for some templates prerequisites. Beware that those checks don't actually always do what they should, and are thus deprecated.
    • _GLIBCXX_DEBUG. Enable the libraries debug-mode. This has considerable runtime-overhead.
    • _GLIBCXX_DEBUG_PEDANTIC Same as above, but checks against the standards requirements instead of only against the implementations.
    0 讨论(0)
  • 2021-01-15 03:15

    You want to use the C++11 standard (and you are right to want that), but C++11 made a huge progress w.r.t. its older C++98 standard.

    But old versions of GCC (i.e. GCC 4.8 or earlier) where not finalized before the standard itself (so they accepted the -std=c++0x flag). I strongly recommend (if you want C++11) to use the latest version of GCC, that is GCC 4.9. A bug fixing GCC 4.9.2 release appeared at end of october 2014. So use it please, and pass it the std=c++11 flag to tell the compiler you want C++11 conformance.

    I actually suggest to pass std=c++11 -Wall -Wextra -g to get C++11, all warnings, and debug info. Once you have debugged your program (with gdb, and you'll better also use a recent version of gdb!) you might ask the compiler to optimize with -O2 (and perhaps -mtune=native if you want to optimize for your own computer)

    0 讨论(0)
提交回复
热议问题