2012-02-01 2 views
1

Имея следующий код:C++: Как узнать, что ваша программа была запущена из Visual Studio, а не из ОС?

int main(int argc, char* argv[]) { 
    // program code 
    std::cout << std::endl << "Press <ENTER> to exit..." << std::endl; 
    std::getchar(); 
    return 0; 
} 

Когда я начинаю эту программу из Visual Studio он пишет:

"Press <ENTER> to exit..." 

ждет на клавишу ENTER нажимается, чем пишет Визуальный стандарт Студия:

"Press any key to continue..." 

Поэтому из Visual Studio (Ctrl + F5) мне нужно нажимать кнопки два раза, но требуется только одно.

Как я могу обойти эту проблему (некоторый код, который обнаруживает запуск из Visual Studio и позволяет «комментировать» мой «код ожидания нажатия клавиши»)?

Благодаря

+0

Я бы сравнил переменные среды, просматриваемые программой между двумя разными случаями. Я бы предположил, что есть некоторые надежные указания, но не удивляйтесь, если их нет. – wallyk

+1

Вы можете прокомментировать свой код независимо от того, как он выполняется; используйте синтаксис '/ * C * /' или '// Си ++ синтаксис' для комментариев. –

+1

Что делать, если вместо Ctrl + F5 вы просто запускаете приложение с F5? – DXM

ответ

4

Вы можете настроить параметры проекта, так что Visual Studio проходит аргумент командной строки в каждый раз, когда он запускает вашу программу. Итак, просто введите аргумент командной строки, который говорит ему не приостанавливаться при выходе и настроить Visual Studio для передачи этого аргумента.

Если вы еще никогда не работали с аргументами командной строки, они отображаются в argc/argv в вашем main.

+0

Казалось бы, добавление аргумента «/ nopause» было бы вообще полезным дополнением к программе в любом случае (чтобы программа могла использоваться в скриптах и ​​т. Д., Как описано @David Schwartz) –

1

Я могу придумать несколько способов сделать это. Один из них заключался бы в том, чтобы Visual Studio передала флаг командной строки в программу при запуске в отладчике (Project Properties -> Debug-> Command Line Arguments).

Еще один трюк - проверить, подключен ли отладчик. Там good sample code at Code Project для этого.

+0

'IsDebuggerXXX()' полезно только при отладке (F5). Ctrl + F5 не запускает отладчик. Таким образом, этот метод не будет работать. – DaddyM

3

Просто избавитесь от кода «нажмите ввод, чтобы выйти» и выйдите. Это бессмысленная вещь и затрудняет использование вашей программы в сценариях или в качестве фильтра. Гораздо лучше, чтобы вы никогда не развивали эту дурную привычку, а затем развивали ее и должны ее нарушать.

+0

бессмысленно иметь этот код, когда программа используется в скриптах или в качестве фильтра, или где-нибудь еще в этом случае. Тем не менее, это очень распространенная практика при написании или отладке указанной программы, потому что, когда вы запускаете процесс под отладчиком визуальной студии, как только процесс завершается, окно команды закрывается, поэтому вы пропускаете любой вывод, о котором можно было сообщить. Вот почему вы хотите, чтобы код OP был во время разработки. Его вопрос специально спросил, как мне активировать во время отладки, но пропустите его для всех других вызовов. – DXM

+0

@ DXM Внимательно прочитайте вопрос. ОП пытается сделать прямо противоположное тому, что вы говорите. Он хочет * отключить * его «нажмите, чтобы продолжить» из среды отладки. –

+0

О да, это странно странно.Я просто удалю свой ответ и дам вам +1 в этом случае. – DXM

Смежные вопросы