Если программист разрабатывает и тестирует код C++17 STL в операционных системах Linux и MacOS с использованием компиляторов GNU C++, g++, LLVM C++, clang++, то скомпилировать и запустить программу из командной оболочки с помощью g++
следующей командой:
$ g++ -std=c++1z -o recipe_app recipe_code.cpp
Аналогичная команда с использованием clang++:
$ clang++ -std=c++1z -o recipe_app recipe_code.cpp
Оба примера командной строки предполагают, что recipe_code.cpp
является текстовым файлом, содержащим ваш код С++. После компиляции программы исполняемый бинарный файл получит имя recipe_app, его можно будет запустить следующим образом:
$ ./recipe_app
Очень часто программисту приходится считывать все содержимое файлов через стандартный ввод. В таких случаях мы используем стандартные каналы UNIX и команду cat
, чтобы направить содержимое файла в наше приложение:
$ cat file.txt | ./recipe_app
Это работает в ОС Linux и MacOS. В оболочке Microsoft Windows команда выглядит так:
> recipe_app.exe < file.txt
Если вы запускаете программы не из оболочки, а из интегрированной среды разработки Microsoft Visual Studio, то вам нужно открыть вкладку Configuration properties ► Debugging (Свойства конфигурации ► Отладка) и добавить фрагмент < file.txt
в командную строку приложения, которое запускает Visual Studio.
Предупреждения для новичков
Возможно, некоторые начинающие программисты могут столкнуться с ситуацией, когда у вас не будут компилироваться ваши файлы. Все зависит от того, какая часть C++17 STL реализована в вашем дистрибутиве STL.
При написании книги приходилось добавлять префикс пути experimental/
к заголовкам <execution_policy>
и <filesystem>
. Кроме того, в каталоге experimental/
вашего дистрибутива STL могут находиться дополнительные заголовочные файлы, например algorithm, numeric и т. д., в зависимости от того, насколько новым и стабильным является дистрибутив.
Это верно и для пространств имен, поддерживающих новейшие возможности. Элементы библиотеки, включенные в экспериментальную часть STL, обычно экспортируются внутрь пространства имен std::experimental (а не std).