Программирование >>  Инициализация объектов класса, структура 

1 ... 114 115 116 [ 117 ] 118 119 120 ... 395


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;

Встретив строку, не начинающуюся с дефиса, мы с помощью переменных состояния можем узнать ее содержание:



1 ... 114 115 116 [ 117 ] 118 119 120 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика