
- •Федеральное агентство по образованию
- •Краткая история языка с
- •Особенности и основные понятия языка Си
- •Структура программы
- •Типы данных
- •Классификация типов данных
- •Вещественные
- •Логический
- •Диапазоны представления данных
- •Объявление переменных
- •Константы в языке Си
- •Операции языка Си. Приоритет операций
- •Операция присваивания
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Поразрядные операции
- •Операцияsizeof
- •Операция выбора по условию
- •Операция запятая
- •Приведение типов Неявное преобразование типов
- •Явное преобразование типов
- •Основные средства ввода-вывода на Си Понятие потока
- •Стандартные потоки
- •Функции потокового ввода-вывода
- •Функции ввода
- •Ввод символов
- •Ввод строк
- •Форматированный ввод
- •Операторы языка Си
- •Оператор if
- •Оператор switch
- •Оператор while
- •Оператор do while
- •Оператор for
- •Оператор break
- •Оператор continue
- •Функции вывода на экран
- •Вывод символов
- •Функция вывода строк puts()
- •Форматированный вывод
- •Указатели в языке Си
- •Адресная арифметика
- •Массивы
- •Функции в языке с
- •Прототипы функций
- •Указатели типа void
- •Функции, возвращающие указатели
- •Встраиваемые функции
- •Рекурсивные функции
- •Функции с переменным числом аргументов
- •Аргументы функции main()
- •Область действия и область видимости
- •Локальные переменные
- •Локальные переменные в функции Main()
- •Глобальные переменные
- •Классы памяти
- •Указатели на указатели
- •Указатели и многомерные массивы
- •Массивы указателей
- •Указатели на функции
- •Операции над строками символов Определение длины строки
- •Копирование строк
- •Поиск в строках
- •Преобразования символов в строках
- •Другие функции для работы со строками
- •Преобразования строк в числа
- •Преобразования чисел в строки
- •Функции анализа символов
- •Распределение памяти
- •Манипулирование блоками памяти
- •Типы, определяемые пользователем
- •Перечислимый тип
- •Структуры
- •Сложные структуры
- •Битовые поля в структурах
- •Объединения
- •Работа с файлами Связь между потоками и файлами
- •Типы дисковых файлов
- •Открытие файла
- •Запись и чтение данных
- •Форматированный ввод-вывод Форматированный вывод
- •Int fprintf (file *fp, char *fmt, ...);
- •Форматированный ввод
- •Символьный ввод
- •Символьный вывод
- •Блочный ввод-вывод
- •Закрытие файла
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Директивы условной компиляции
- •Директива #undef
- •Предопределенные макросы
- •69 Лекции по курсу «Языки программирования» Часть III
Аргументы функции 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 в диалоговом окне компиляции. |
Внимание.
Используется имена для параметров, ассоциированных с аргументами командной строки. Большинство программистов на С поступают именно так.
Не полагайтесь на то, что пользователь введет правильное количество аргументов командной строки. Всегда выполняйте проверку. Если пользователь ввел что-то неправильно, выведите на экран сообщение об ошибке.