Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 3).doc
Скачиваний:
138
Добавлен:
15.04.2015
Размер:
1.34 Mб
Скачать

Аргументы функции main()

Программа на Си может принимать аргументы, переданные в программу при ее запуске из командной строки. Имеются в виду любые данные, введенные в этой строке после имени самой программы. Эти данные можно воспринимать как аргументы, передаваемые в функцию main().

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

main(int argc, char *argv[])

{

/* Операторы тела программы */

}

Первый параметр argc — это целое число, указывающее количество переданных аргументов командной строки. Его значение всегда не меньше 1, поскольку имя самой программы считается первым аргументом.

Параметр argv[] представляет собой массив строки. Индексы этого массива варьируются в диапазоне от 0 до argc-1. Указатель argv[0] указывает на строку с именем программы (включая полный путь к ней), argv[1] — на первый аргумент после имени программы и т.д.

Имена argc и argv[] не являются обязательными – можно использовать вместо них любые идентификаторы, подчиняющиеся правилам синтаксиса Си. Однако эти два имени широко и традиционно используются для работы с аргументами командной строки, поэтому их желательно придерживаться.

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

Пример:

C:>progname abc "1 2 3"

Здесь abc — первый аргумент (помещаемый в argv[1]), a and 1 2 3 — второй (ему соответствует указатель argv[2]). Пример демонстрирует, как обращаться к аргументами командной строки внутри программы.

Аргументы командной строки можно подразделить на две категории — обязательные аргументы, без которых она вообще не выполнит никаких полезных операций, и необязательные, наподобие флагов выбора того или иного режима работы. Для примера представим себе программу, которая выполняет сортировку данных в файле. Если программа считывает имя файла данных из командной строки, то это имя как раз и будет обязательным аргументом. Если пользователь не введет его в командной строке, то программа вообще не сможет отсортировать данные, и ей придется как-то урегулировать эту ситуацию. Программа может также принимать аргумент /r, указывающий, что данные следует сортировать в обратном порядке. Этот аргумент является необязательным, потому что при его наличии программа просто выполняет один вид операций сортировки, а при его отсутствии — другой.

В системе Borland C++ предусмотрен еще и третий аргумент, который, так же как и второй, является указателем на массив строк: main(int argc, char *argv[], char *env[]){...}

Этот аргумент используется для доступа к параметрам среды операционной системы. Параметр env объявлен так же, как и argv, т. е. это указатель на массив строк, которые содержат установку среды. Последняя строка этого массива пустая. Поэтому можно выдать содержание командной строки и состояние среды:

В интегрированных средах разработки с графическим интерфейсом, как правило, можно ввести аргументы командной строки в диалоговом окне. Обычно это кнопка Parameters в диалоговом окне компиляции.

Внимание.

Используется имена для параметров, ассоциированных с аргументами командной строки. Большинство программистов на С поступают именно так.

Не полагайтесь на то, что пользователь введет правильное количество аргументов командной строки. Всегда выполняйте проверку. Если пользователь ввел что-то неправильно, выведите на экран сообщение об ошибке.