Никто явно не говорит вам об этом, поэтому я буду:
Когда вы дважды щелкаете файл, вы видите normal . То, что делает ваша IDE (с открытым окном), это функция , помогающая отлаживать приложение.
Почему это так?
Поскольку вы разрабатываете консольное приложение , для вашего приложения должна быть консоль для отображения его вывода. Если его еще нет, создается новая консоль (черное окно).
Если вы запустите свою программу из консоли (скажем, из cmd.exe
), она просто унаследует консоль родительского элемента без создания новой [1].
После выхода из последнего приложения, использующего консоль (которая в первом случае является только вашей программой), консоль закрывается. Вы будете постоянно замечать это для консольных приложений, которые при запуске без параметров выводят только текст справки. Если дважды щелкнуть их в проводнике, будет мигать черное окно с текстом, а затем немедленно закрыть.
Иногда, программа, которая что-то делает, и они немедленно закрываются, это то, что вы хотите. Например, вы можете вызывать эти приложения из скриптов.
С другой стороны, ваше приложение может быть интерактивным: ожидание пользовательского ввода, выполнение какой-либо операции и выход только тогда, когда пользователь сообщает об этом. Очевидно, что вы не можете создавать сценарии для этих приложений, так как вам нужно, чтобы на клавиатуре присутствовал человек, чтобы сообщить приложению, что делать.
Теперь перейдем к части IDE: допустим, вы разрабатываете приложение первого типа, которое что-то делает, а затем сразу закрывает. Не очень удобно заставлять экран мигать и исчезать при каждом его запуске, потому что как вы можете определить, работает ли программа? Предполагая, что вы можете сказать это по выводу, который он генерирует.
Конечно, вы можете запустить окно командной строки и запустить приложение оттуда, но программа будет выполняться отдельно от IDE, и вы потеряете возможности оперативной отладки.
Итак, разработчики IDE придумали функцию для консольных приложений: когда вы запускаете приложение непосредственно из IDE, они впоследствии, как правило, ожидают нажатия клавиш. Это дает вам возможность проверить окно с выводом, чтобы убедиться, что приложение работает правильно.
[1] Esoterica: если вы не просматриваете приложение, которое не наследует консоль. Любое консольное приложение, запущенное этим приложением, не будет наследовать консоль, поскольку наследование было нарушено приложением с графическим интерфейсом. Например, start.exe
делает это. Для сравнения:
foo.exe (inherits the console)
start foo.exe (start.exe is a GUI app, so foo.exe is launched in a new console)