Skip to content

Home Программирование Аргументы программы
Аргументы программы

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

 

Аргументы программы

Программа, созданная на языке С, может получать данные извне посредством чтения аргументов функции main о. Такие данные называют аргументами программы. Не следует отождествлять понятия "аргументы программы" и "аргументы командной строки". Дело в том, что программа получает свои аргументы от родительского процесса, в качестве которого не всегда выступает командная оболочка.

Прототип (объявление) функции main {} можно представить следующим образом:

int main (int argc, char ** argv, char ** envp)

Третий аргумент, идентичный массиву environ и содержащий окружение программы, исторически не прижился. Поэтому функцию main() обычно представляют в укороченном виде:

int main (int argc, char ** argv)

Если в программе не предусмотрено чтение аргументов, то функцию main {} можно объявить еще проще:

int main   (void)

или даже так:

int main   ()

Возможность подобных вариаций с прототипами обусловлена отсутствием единого объявления для функции main(). Работая с ее аргументами, компилятор рассчитывает лишь на "здравый рассудок" программиста.

Значение argc показывает общее число аргументов программы. Всегда следует помнить, что первый аргумент (argv[0]) формально содержит имя программы. Реально в argv[0] может находиться что угодно. 

Вместо "исторических" имен argc и argv можно выбрать любые другие. В этом можно легко убедиться, написав небольшую программу. Но имена argc и argv настолько укоренились в культуре программирования, что любой опытный программист наверняка скажет, что приведенный в листинге  пример написан в дурном стиле.

Программа mainargs.c

#include <stdio.h>
int main (int a, char ** b)
{
int i;
for (i = 0; i < a; i++)
printf ("%d: %s\n", i, b[i]);
return 0;
}

Аргументы программы могут интерпретироваться как угодно. Но это, как ни странно, может создавать большие неудобства. Если каждая программа ведет себя по-своему, то работа пользователя может превратиться в кошмар. Чтобы избежать подобных ситуаций, подавляющее большинство программ в Linux используют опции.

Опции (options) — это унифицированный интерфейс для передачи данных в программу через аргументы. Механизм опций позволяет разделить все аргументы программы на следующие категории:

  • Опции. Обычно перед опцией стоит дефис. Различают короткие (односимвольные) и длинные (многосимвольные) опции. Длинные опции часто начинаются с последовательности из двух дефисов.
  • Зависимые аргументы (аргументы опций). Некоторые опции предполагают наличие аргумента. Например, имя файла, которое указывается вслед за опцией -о компилятора gcc, является зависимым аргументом. Опции, не требующие наличия зависимых аргументов, называют флагами (flags). Как правило, одна опция может принимать только один такой аргумент.
  • Свободные аргументы. Эти аргументы не связаны напрямую с опциями. Например, имя каталога, передаваемое программе rmdir, является свободным аргументом.

Рассмотрим пример вызова программы с использованием опций:

$ gcc -pedantic -с -о program.о program.с

Итак, команда состоит из шести частей.

  1. gcc — это имя программы, которое командная оболочка обычно заносит в argv[0].
  2. -pedantic — длинная опция, не требующая наличия зависимого аргумента (флаг).
  3. -с — короткая опция, не требующая наличия свободного аргумента (флаг).
  4. -о — короткая опция, требующая наличия зависимого аргумента.
  5. program.о —это зависимый аргумент опции -о.
  6. program.с — свободный аргумент.

Комментарии (0)

RSS feed Comments

Написать комментарий

smaller | bigger

busy
 

Регистрация




Top