|
Программирование >> Инициализация объектов класса, структура
prog [-d] [-h] [-v] [-o output file] [-l limit value] file name программа из нашего примера вызывается таким образом: [ file name [file name [ ... ]]] Параметры в квадратных скобках являются необязательными. Вот, например, запуск программы с их минимальным количеством - одним лишь именем файла: prog chap1.doc prog -l 1024 -o prog d chap3.doc -o chap1-2.out chapl.doc chap2.doc Но можно запускать и так: prog -l 512 -d chap4.doc При разборе параметров командной строки выполняются следующие основные шаги: 1. По очереди извлечь каждый параметр из argv. Мы используем для этого цикл for с for ( int ix = 1; ix < argc; ++ix ) { char *pchar = argv[ ix ]; ... начальным индексом 1 (пропуская, таким образом, имя программы): 2. Определить тип параметра. Если строка начинается с дефиса (-), это одна из опций { h, d, v, l, o}. В противном случае это может быть либо значение, ассоциированное с опцией (максимальный размер для -l, имя выходного файла для -o), либо имя входного файла. Чтобы определить, начинается ли строка с дефиса, используем switch ( pchar[ 0 ] ) { case -: { -h, -d, -v, -l, -o default: { обработаем максимальный размер для опции -1 имя выходного файла для -o имена входных файлов инструкцию switch: В argv[0] всегда входит имя команды (программы). Элементы с индексами от 1 до argc-1 служат параметрами. Посмотрим, как можно извлечь и использовать значения, помещенные в argv. Пусть case { switch( pc pchar[ 1 ] ) case d: обработка опции debug break; case v: обработка опции version break; case h: обработка опции help break; case o: приготовимся обработать выходной файл break; case приготовимся обработать макс. размер break; default: неопознанная опция: сообщить об ошибке и завершить волнение определения конкретной опции. Вот общая схема этой части программы: Опция -d задает необходимость отладки. Ее обработка заключается в присваивании переменной с объявлением bool debug on = false; case d: debug on = true; значения true: break; if ( debug on ) В нашу программу может входить код следующего вида: display state elements( obj ); Реализуем обработку двух случаев пункта 2. Если строка начинается с дефиса, мы используем switch по следующему символу для case v: cout << program name << :: << program version << endl; Опция -v выводит номер версии программы и завершает исполнение: return 0; Опция -h запрашивает информацию о синтаксисе запуска и завершает исполнение. case h: break не нужен: usage() вызает exit() Вывод сообщения и выход из программы выполняется функцией usage() : usage(); Опция -o сигнализирует о том, что следующая строка содержит имя выходного файла. Аналогично опция -l говорит, что за ней указан максимальн1й размер. Как нам обработать эти ситуации? Если в строке параметра нет дефиса, возможны три варианта: параметр содержит имя выходного файла, максимальный размер или имя входного файла. Чтобы различать эти если ofi1e on==true, следящий параметр - имя водного файла bool ofi1e on = false; если ofi1e on==true, следящий параметр - максимально размер случаи, присвоим true переменным, отражающим внутреннее состояние: bool limit on = false; case l: limit on = true; break; ofile on = true; Вот обработка опций -l и -o в нашей инструкции switch: break; Встретив строку, не начинающуюся с дефиса, мы с помощью переменных состояния можем узнать ее содержание:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |