Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода по ОАиП.doc
Скачиваний:
12
Добавлен:
11.05.2015
Размер:
3.21 Mб
Скачать

11.7. Параметры командной строки функции main

В стандарте ANSIфункцияmainвозвращает целочисленный результат, т.е. используется следующим образом:

int main () {

return 0;

}

здесь оператор returnвозвращает операционной системе код завершения функции, причем значение 0 трактуется как нормальное завершение, остальные значения воспринимаются как ошибки.

Функция mainможет быть определена с параметрами, которые передаются из внешнего окружения, например, из командной строки. Во внешнем окружении действуют свои правила представления данных, а точнее, все данные представляются в виде строк символов. Для передачи этих строк в функциюmainиспользуются два параметра, общепринятые (необязательные) идентификаторы которыхargcиargv:

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

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

Функция mainможет иметь и третий параметрargp, который служит для передачи параметров операционной системы (ОС), в которой выполняется программа, в этом случае ее заголовок имеет вид

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

Операционная система поддерживает передачу значений для параметров argc,argv,argp, а пользователь отвечает за передачу и использование фактических аргументов функцииmain.

Приведем пример программы печати фактических аргументов, передаваемых из ОС в функцию mainи параметров оперативной системы.

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

{

int i;

printf ("\n Program Name %s", argv[0]);

for( i=1; i <=argc; i++)

printf ("\n Argument %d = %s", i, argv[i]);

printf ("\n OC parametrs: ");

while (*argp) {

printf ("\n %s", *argp);

argp++;

}

return 0;

}

Очевидно, что оформленная таким образом функция main() может вызываться рекурсивно из любой функции.

Глава 12. Классы памяти и область действия объектов

12.1. Классы памяти объектов в языке Cи

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

Класс памятипрограммного объекта определяет время ее существования (время жизни) и область видимости (действия) иможет принимать одно из значений: auto, extern, static и register.

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

Область действия объекта – это часть кода программы, в которой его можно использовать для доступа к связанному с ним участку памяти. В зависимости от области действия переменная может быть локальной (внутренней) или глобальной (внешней).

Имеется три основных участка программы, где можно декларировать переменные:

– внутри функции (блока);

– в заголовке функции при определении параметров;

– вне функции.

Эти переменные соответственно называются локальными (внутренними) переменными, формальными параметрами и глобальными (внешними) переменными.

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

Областью действия глобальных данных считается файл, в котором они определены, от точки описания до его окончания.

Если класс памяти у переменной не указан явным образом, он определяется компилятором исходя из контекста ее декларации.

Время жизни может быть постоянным – в течение выполнения программы, и временным – в течение выполнения функции (блока) программы.