594 _________Часть IV. Новые возможности C++

{

cout « "Внутри DoSomethingElse.\n";

}

void DoSomethingUseful(int Flag) {

cout « "Внутри DoSomethingUseful.\n";

// Переменная Flag слишком мала или слишком велика? if (Flag < MIN_FLAG_VALUE I¦ Flag > MAX_FLAG_VALUE) throw FLAG_OUT_OF_BOUNDS;

// Некая деятельность try {

if (Flag == 0) {

cout « "Флаг установлен в 0.\п";

DoSomethingElse () ;

} else

throw "Флаг не равен нулю.";

}

catch (char *ErrorString) { cout « ErrorString « "\n";

} }

void main(int argc, char *argv[ ]) (

// Если параметры командной строки отсутствуют,

//то установить флаг в ноль

int UseFiag = (argc == 1 ? О : atoi(argv[l])) ;

// Произвести какую-то работу try {

DoSomethingUseful(UseFiag) ;

} catch (int ErrorCode) {

cout « "Перехвачена исключительная ситуация (" « ErrorCode « ").\n";

} }

Этот пример выглядит обманчиво простым, но в нем есть несколько интересных моментов. В табл. 22.1 показано, что программа из листинга 22.11 выведет на экран в зависимости от аргумента, переданного ей в командной строке.

h05941.jpg

Аргумент командной строки

На выходе

Аргументов нет

Внутри DoSomethingUseful Флаг установлен в 0 Внутри DoSomethingElse