Antwort
von CgigPlus am 06.01.2020, 01.24 Uhr
Für jeden C/C++ Programmcode, der von GCC, G++ oder MSVC kompiliert wird, versucht der Compiler, einem oder mehreren C/C++ Sprachstandards zu folgen. Du kannst dem Compiler explizit angeben, welchen der verfügbaren C/C++ Standards beim Kompilieren deines Programms verwendet werden soll. Die Version des Standards kannst Du in der Kompilierungsoption "-std=..." (Linux; MinGW für Windows) bzw. "/std:..." (MSVC für Windows) in der Kommandozeile festlegen.
Zum Beispiel:
$ gcc -std=c17 ./my_prog.c
$ gcc -std=c++11 -lstdc++ ./my_prog.cpp
$ g++ -std=c++17 ./my_prog.cpp -o my_prog
> csc.exe /std:c++17 my_prog.cpp
GCC Compiler unterstützt die folgenden C Standards:
c90 (1990; ANSI C)
c99 (1999)
c11 (2011)
c17 (2017)
GCC/G++ Compiler unterstützen die folgenden C++ Standards:
c++98 (1998)
c++11 (2011)
c++14 (2014)
c++17 (2017)
c++2a (2020)
Um auch GNU-Erweiterungen für einen bestimmten Standard zu aktivieren, verwende die Bezeichnung "gnu" anstatt von "c++" im Parameter "-std=...". Zum Beispiel, "-std=gnu17" anstatt von "-std=c++17".
Du kannst den Parameter "-std=..." auch in den Variablen CFLAGS (für C Compiler) bzw. CCFLAGS (für C++ Compiler) im Makefile angeben, wenn Du ein Makefile benutzt. Die Variable aus dem Makefile wird beim automatischen Aufruf des Compilers (Build-Prozess) durch den Wert $(CFLAGS) bzw. $(CCFLAGS) ersetzt.
Zum Beispiel:
$GCC $CFLAGS my_prog.c -o file $LDFLAGS
In Entwicklungsumgebungen (IDE) für C/C++ wie Microsoft Visual Studio findest Du die entsprechenden Optionen unter Project > Properties > C/C++ > Language > C++ Language Standard. Du kannst den gewünschten C/C++ Standard im Dropdown-Menü auswählen.
Die von Microsoft Visual Studio unterstützten C++ Standards und die entsprechenden Kommandozeilenparameter sind:
/std:c++14 (2014)
/std:c++17 (2017)
/std:c++latest (die aktuell implementierten Features von Compiler und Standardbibliotheken)
Visual Studio 2017 unterstützt CMake Projekte. CMake erlaubt es, den C++ Standard als Property in CMakeLists.txt zu setzen.
Zum Beispiel:
add_library (${PROJECT_NAME})
set_property (TARGET ${PROJECT_NAME}
PROPERTY
# Den Standard C++14 aktivieren
CXX_STANDARD 14
)