switch ( pchar[ 0 ] ) {
case '-': {
// -h, -d, -v, -l, -o
}
default: {
// обработаем максимальный размер для опции -1
// имя выходного файла для -o
// имена входных файлов ...
}
}
Реализуем обработку двух случаев пункта 2.
Если строка начинается с дефиса, мы используем switch по следующему символу для определения конкретной опции. Вот общая схема этой части программы:
case '-': {
switch( pchar[ 1 ] )
{
case 'd':
// обработка опции debug
break;
case 'v':
// обработка опции version
break;
case 'h':
// обработка опции help
break;
case 'o':
// приготовимся обработать выходной файл
break;
case 'l':
// приготовимся обработать макс.размер
break;
default:
// неопознанная опция:
// сообщить об ошибке и завершить выполнение
}
}
Опция -d задает необходимость отладки. Ее обработка заключается в присваивании переменной с объявлением
bool debug_on = false;
значения true:
case 'd':
debug_on = true;
break;
В нашу программу может входить код следующего вида:
if ( debug_on )
display_state_elements( obj );
Опция -v выводит номер версии программы и завершает исполнение:
case 'v':
cout << program_name << "::"
<< program_version << endl;
return 0;
Опция -h запрашивает информацию о синтаксисе запуска и завершает исполнение. Вывод сообщения и выход из программы выполняется функцией usage():
case 'h':
// break не нужен: usage() вызывает exit()
usage();
Опция -o сигнализирует о том, что следующая строка содержит имя выходного файла. Аналогично опция -l говорит, что за ней указан максимальный размер. Как нам обработать эти ситуации?
Если в строке параметра нет дефиса, возможны три варианта: параметр содержит имя выходного файла, максимальный размер или имя входного файла. Чтобы различать эти случаи, присвоим true переменным, отражающим внутреннее состояние: