textpub.neocities.org . [ записки: обучаюсь C++ ]

Из моих записок про самообучение C++. Оригинальный пост в ЖЖ написан 29.12.2018 г.

Консольная программа закрывается

Практически во всех учебниках по программированию на C++ под Windows обучение начинается с создания консольных приложений (см. текстовый интерфейс пользователя, интерфейс командной строки). Например, Лафоре начинает с такой программы:

#include <iostream>
using namespace std;
int main()
{
    cout << "У каждой эпохи свой язык\n";
    return 0;
}

И это нормально, для начинающего работа с оконным интерфейсом довольно сложна.

Во многих учебниках сборка программы и запуск полученного после сборки исполняемого файла вообще остаются за кадром, либо, как у Лафоре, засунуты в приложения. Это происходит потому, что учебники рассчитаны на десятки лет использования, а компиляторы обновляются каждый год и их разнообразие не позволяет охватить их все.

Поэтому у начинающих сразу возникает масса вопросов. Например, один из самых популярных (на соответствующих форумах ежегодно плодятся подобные темы) — после запуска исполняемого файла, полученного от сборки вышеуказанной программы, окно консольного приложения закрывается так быстро, что ученик не успевает увидеть результат работы программы.

Чтобы разобраться в проблеме, нужно понимать, что полученный от сборки исполняемый файл в Windows можно запускать, как минимум, тремя способами: 1) из интегрированной среды разработки; 2) из Проводника Windows; 3) из командной строки. Рассмотрим в обратном порядке.

3. Изначально предполагается, что консольная программа будет запускаться из командной строки. Это следует из самого понятия консольной программы. В разных версиях Windows командную строку можно запустить по-разному и несколькими способами. Например, я запускаю через «Пуск — Все программы — Стандартные — Командная строка». Откроется окно с интерфейсом командной строки. Зная соответствующие команды, нужно перейти в каталог с нашим исполняемым файлом и запустить его. В этом случае никаких проблем возникнуть не должно, после окончания работы программы окно командной строки не закроется, а продолжит ожидать следующих команд. Можно будет видеть результат работы программы.

2. Однако, сейчас пользователи Windows в большинстве привыкли запускать исполняемые файлы из Проводника Windows. В случае запуска исполняемого файла вышеуказанной программы из Проводника Windows откроется окно командной строки, программа сработает и окно командной строки закроется. Это произойдет так быстро, что увидеть результат работы программы не получится. После этого новичок выходит в интернет и быстро находит советы дописать программу так, чтобы она в конце своей работы ожидала от пользователя нажатия любой клавиши на клавиатуре. Например:

#include <iostream>
using namespace std;
int main()
{
    cout << "У каждой эпохи свой язык\n";
    
    // ждем, пока пользователь рассмотрит результат работы
    // программы и нажмет любую клавишу
    system("pause");
    
    return 0;
}

1. На этапе написания и отладки программы удобнее всего запускать полученный от сборки программы исполняемый файл прямо из интегрированной среды разработки. В «Visual Studio Community 2017» это осуществляется с помощью комбинации клавиш Ctrl+F5 или через пункт меню «Отладка — Запуск без отладки».

Берем первоначальный вариант текста программы от Лафоре без дописок и добавляем его в качестве файла с расширением .cpp в новый проект (о том, как это сделать, я уже писал).

Если при создании проекта был выбран тип проекта «Пустой проект», то по умолчанию при запуске программа поведет себя так же, как и при запуске из Проводника Windows — окно командной строки откроется, программа сработает и окно командной строки закроется так быстро, что результат работы увидеть не удастся.

Чтобы окно командной строки не закрылось сразу, необходимо произвести донастройку в свойствах проекта. Для этого с помощью пункта меню «Проект — Свойства» (Alt+F7) откроем окно свойств проекта. В левом меню этого окна выберем пункт «Свойства конфигурации — Компоновщик — Система». В списке свойств справа от меню выберем свойство «Подсистема» и назначим для него значение «Консоль (/SUBSYSTEM:CONSOLE)». После нажатия кнопки «OK» окно закроется. После этого можно произвести сборку программы и запуск исполняемого файла из среды разработки. Программа при окончании работы подождет от пользователя нажатия любой клавиши и можно будет рассмотреть результат работы программы.

Если же при создании проекта был выбран тип проекта «Консольное приложение Windows», то указанная донастройка свойств проекта не потребуется.

textpub.neocities.org . [ записки: обучаюсь C++ ]