Программирование >>  Аргументация конструирования 

1 ... 29 30 31 [ 32 ] 33 34 35 ... 108



case 1: pszReturnValue= Январь ; break;

cas turnValue = Февраль ;

break;

case 3: pszReturnValue = Март ;

break; и так далее,..

ciefault: pszReturnValue = Неверный номер месяца

return pszReturnValue;

Оператор switch {> действует так же, как совокупность операторов if.

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

ir.Cnth () - возвращает название месяца char* int2month(int nMonth) {

проверка правильности номера месяца if (rMonth < 1 М nMonth > 12)

leturn invalid ;

r.Month имеет корректное значение

имя месяца

char pszMonths[] = ( Ошибка ,

Январь ,

Февраль ,

Март ,

Апрель ,

Май ,

Июнь ,

Июль ,

Август ,

Сентябрь ,

Октябрь ,

Ноябрь ,

Декабрь };

return pszMonths[nMonth];

Сначала в этой программе проверяется корректность аргумента nMonth, т.е. что его значение лежит в диапазоне между 1 и 12 включительно (в предтдущей программе проверка производилась, по сути, оператором Если значение nMonth правильное, оно используется как смещение внутри массива, содержащего названия месяцев.

Доступ к аргументам main ()

Второй аргумент функции main () - массив указателей на строки. Эти строки содержат аргументы, передаваемые программе при вызове. Допустим, я ввел следующее в командной строке MS DOS:

MyProgram file.txt /w



MS DOS запустит программу, которая находится в файле MyProgram.exe, и передаст ей как аргументы file.txt и /w. Аргументы, начинающиеся с косой черты (/)

или дефиса (-), обрабатываются операционной системой, как и любые другие: они передаются программе, чтобы та разбиралась с ними сама. Аргументы, которые начинаются с <, >, >> или ! (а иногда и некоторые другие), представляют особый интерес для операционных систем и программе не передаются.

Аргументы программы являются одновременно аргументами функции main (). Переменная pszArgs, передаваемая О, содержит массив указателей на аргументы программы, a nArgs - их количество.

Ниже приведен пример считывания аргументов из командной строки. PrintArgs - выводит аргументы программы

в стандартный вывод операционной системы ,

#include <stdio.h> ttinclude <iostream.h>

in (int nArg, char* pszArgs[)) {

печатает начальную строку

cout Аргументами программы pszArgs [0] являютсяХп ;

Выводит аргументы программы for (int i = 1; i < nArg; i + + )

cout i : pszArg3[ij \n ;

вот и все

cout << Вот и все \п ;

return 0;

Как всегда, функция получает два аргумента. Первый - переменная типа

int, которую я назвал nArgs. Эта переменная содержит количество передаваемых программе аргументов. Вторая переменная содержит массив указателей типа char*; ее я назвал pszArgs. Каждый из этих указателей ссылается на один из аргументов программы.

Если запустить программу PrintArgs с аргументами PrintArgs argl arg2 arg3 /w

из командной строки MS DOS, nArgs будет равняться 5 (по количеству Первый аргумент - имя самой программы. Таким образом, pszArgs [0] будет указывать на имя запускаемого файла, а остальные четыре указателя - на оставшиеся четыре аргумента (в данном случае это argl , arg2 , ...) Поскольку MS DOS никак не выделяет символ /, последний аргумент будет представлять собой строку /w .



Глава 10

Прочие функциональные особенности

Вsifioii главе...

Зачем разбивать программу на модули

Пример большой программы

Разделение программы FunctionDemo Использование директивы #include Использование стандартных библиотек C + +

екоторые программы достаточно малы, чтобы без проблем размешаться в од-f ном исходном . срр-файле. Для большинства же промышленных программ это ограничение было бы слишком строгим. В этой главе показано, как разбить программу на несколько исходных файлов, каждый из которых можно отдельно тестировать и компилировать.

Зачем fiaaiujecuHb nfiotfuuuitf на uu>q(fju

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

Процесс объединения отдельно скомпилированных модулей называется связыванием или компоновкой (linking).

Разделение программ на несколько небольших, удобнтх для редактирования и управления частей имеет определенные преимущества. Во-первых, это уменьшает время компиляции. GNU C + + или Visual C + + проглотят приведенные в этой книге программы и втдадут выполнимые файлы за несколько секунд. Большие программы требуют больше времени на компоновку. Ваш покорный слуга работал над

проектами, полная компиляция которых занимала целую ночь.

Пересобирать программу целиком каждый раз, когда была изменена одна функция, очень неудобно. Намного проще откомпилировать одну функцию, организованную в виде отдельного модуля (можно составить модуль и из нескольких функций).

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

Последний (и, наверное, самый главный) аргумент заключается в том, что небольшие модули можно использовать и при написании других программ.



1 ... 29 30 31 [ 32 ] 33 34 35 ... 108

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