рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

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

Аргументы функции main() - раздел Философия, Лекция 1. Объектно-ориентированное программирование – это новый подход к программированию. Объектно- ориентированные языки обладают свойством   Функция Main, С Которой Начинается Выполнение Программы На Яз...

 

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

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

Заголовок функции main с параметрами имеет вид:

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

Если, например, командная строка СИ-программы имеет вид:

A:>cprog working 'C program' 1

то аргументы argc, argv, argp представляются в памяти как показано в схеме: argc [ 4 ]

argv [ ]--> [ ]--> [A:cprog.exe]

[ ]--> [working]

[ ]--> [C program]

[ ]--> [1]

[NULL]

argp [ ]--> [ ]--> [path=A:;C:]

[ ]--> [lib=D:LIB]

[ ]--> [include=D:INCLUDE]

[ ]--> [conspec=C:COMMAND.COM]

[NULL]


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

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

 

Пример:

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

{ int i=0;

printf ("n Имя программы %s", argv[0]);

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

printf ("n аргумент %d равен %s", argv[i]);

printf ("n Параметры операционной системы:");

while (*argp)

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

argp++;

}

return (0);

}

 

Доступ к параметрам операционной системы можно также получить при помощи библиотечной функции geteuv, ее прототип имеет следующий вид:

char *geteuv (const char *varname);

Аргумент этой функции задает имя параметра среды, указатель на значение которой выдаст функция geteuv. Если указанный параметр не определен в среде в данный момент, то возвращаемое значение NULL.

Используя указатель, полученный функцией geteuv, можно только прочитать значение параметра операционной системы, но нельзя его изменить. Для изменения значения параметра системы предназначена функция puteuv.

Компилятор языка СИ строит СИ-программу таким образом, что вначале работы программы выполняется некоторая инициализация, включающая, кроме всего прочего, обработку аргументов, передаваемых функции main, и передачу ей значений параметров среды. Эти действия выполняются библиотечными функциями _setargv и _seteuv, которые всегда помещаются компилятором перед функцией main.

Если СИ-программа не использует передачу аргументов и значений параметров операционной системы, то целесообразно запретить использование библиотечных функций _setargv и _seteuv поместив в СИ-программу перед функцией main функции с такими же именами, но не выполняющие никаких действий (заглушки).


Начало программы в этом случае будет иметь вид:

 

_setargv()

{ return ; /* пустая функция */

}

-seteuv()

{ return ; /* пустая функция */

}

int main()

{ /* главная функция без аргументов */

...

...

renurn (0);

}

 

В приведенной программе при вызове библиотечных функций _setargv и _seteuv будут использованы функции помещенные в программу пользователем и не выполняющие никаких действий. Это заметно снизит размер получаемого exe-файла.

 

При запуске программы Borland C++ функции main() передаются три параметра (аргумента) : argc, argv и env.

* argc (тип integer) - число аргументов командной строки,

передаваемых функции main.

* argv - массив указателей на строки (char *[]).

- В версиях DOS 3.x argv[0] - полное (т.е. включая путь к файлу) имя запускаемой программы.

- argv[1] указывает на первую строку символов, набранную в

командной строке DOS после имени программы.

- argv[2] указывает на вторую строку символов после имени

программы.

- argv[argc-1] указывает на последний параметр,

передаваемый функции main()

- argv[argc] содержит NULL

* env - также массив указателей на строки. Каждый элемент

env[] содержит строку вида ENVVAR = значение.

- ENVVAR - имя переменной среды, такой, как PATH или 87.

- значение - значение, в которое установлена ENVVAR,

например С:DOS; C:TOOLS (для PATH) или YES (для 87).

Если объявляются только некоторые из этих параметров, то

нужно объявлять их точно в следующем порядке: argc, argv, env.


Например, правильными объявлениями аргументов функции main являются следующие:

 

main()

main(int argc, char * argv[])

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

 

Пример программы:

 

Ниже приведен пример программы, которая демонстрирует

простейшее использование аргументов, передаваемых функции main.

 

#include <stdio.h>

#include <stdlib.h>

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

{

int i;

 

printf("Значение argc - %d nn",argc);

printf("Функции main передано %d аргументов командной

строки: nn",argc);

 

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

printf(" argv[%d]: %sn", i, argv[i]);

printf("nСреда системы содержит следующие строки:nn");

 

for (i = 0; env[i] != NULL; i++)

printf(" env[%d]: %sn", i, env[i]);

return 0;

}

 

Предположим, в среде DOS запущена программа

ARGS.EXE, задав следующую командную строку:

C:>args first_arg "арг с пробелами" 3 4 "предпоследний арг"

stop!

 

Можно передавать аргументы, содержащие пробелы, заключив эти аргументы в двойные кавычки, как показано выше в примере командной строки: "арг с пробелами" и "предпоследний арг".

 


Лекция 6.

 

Результат выполнения программы ARGS.EXE (предполагая, что переменные среды установлены так, как представлено ниже) будет приблизительно такой:

 

Значение argc равно 7

В командной строке содержится 7 передаваемых main

аргументов:

argv[0]: C:BORLANDCARGS.EXE

argv[1]: first_arg

argv[2]: aрг с пробелами

argv[3]: 3

argv[4]: 4

argv[5]: предпоследний арг

argv[6]: stop!

 

Строки среды в системе следующие:

 

env[0]: COMSPEC=C:COMMAND.COM

env[1]: PROMPT=$p $g

env[2]: PATH=C:SPRINT;C:DOS;C:BORLANDC

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

128 символов (это ограничение DOS).

 

– Конец работы –

Эта тема принадлежит разделу:

Лекция 1. Объектно-ориентированное программирование – это новый подход к программированию. Объектно- ориентированные языки обладают свойством

ВВЕДЕНИЕ... Приступая к изучению более сложных конструкций языка С следует прежде всего повторить тот материал который был...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Аргументы функции main()

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Имя_объекта.имя_элемента
x1.real=dim[3].real=1.45;   Класс может иметь столько объектов сколько необходимо, так же как и любая функция. Объекты могут быть любого тип

Имя объекта.имя функции();
Пример: #include<iostream.h> class rec { private: double len; double wid; public: double Len(){ return len/100;}

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

Директивы препроцессора.
  Препроцессор(макропроцессор) - это составная часть стандартного пакета языка Си, которая обрабатывает исходный текст программы до того, как он пройдет через компиля

Включение файлов.
  Директива #include включает в текст программы содержимое указанного файла. Эта директива имеет две формы:   #include "имя файла&

Условная компиляция.
  Условные конструкции препроцессора позволяют компилировать или пропускать часть программы в зависимости от выполнения некоторого условия. Условие может принимать одну из описываемых

ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ТИПОВ ДАННЫХ.
  Беззнаковые данные хранятся в оперативной памяти просто, чтобы узнать какое число хранится в данном байте или в слове необходимо выписать значения всех его битов и считать, что это

Доступ к отдельному биту.
  Одним из методов, позволяющих доступ к биту - это использование полей битов. Поля битов – это специальный тип членов структуры, в котором определено из скольких бит состоит каждый э

Область действия и область видимости переменных.
  В языке C++ каждая функция это отдельный блок программы. Попасть в тело функции можно только с помощью вызова данной функции, то есть нельзя оператором безусловного перехода goto пе

Модификаторы переменных.
  В языке C++ имеется несколько модификаторов которые изменяют область действия и время жизни переменных     Модификаторы &nb

Модификатор тип_переменной имя_переменной
Все переменные в программе характеризуются не только типом, но и классом памяти. В языке Си существует четыре класса памяти: автоматический (automatic), регистровый(registe

Время жизни переменных.
  Если программист не указал иного, то объект создается, когда встречается его описание, и уничтожается, когда его имя выходит из области видимости, Объекты с глобальными именами созд

ПЕРЕГРУЖЕННЫЕ ФУНКЦИИ.
  Перегрузкой называют практику придания функции более чем одного значения. Этот термин означает, что в коде программы существует две различные по содержанию, но одинаковые по названи

ФУНКЦИИ С ПЕРЕМЕННЫМ ЧИСЛОМ ПАРАМЕТРОВ.
  При вызове функции с переменным числом параметров в вызове этой функции задается любое требуемое число аргументов. В объявлении и определении такой функции переменное число аргумент

УКАЗАТЕЛЬ НА ФУНКЦИЮ.
  Основными характеристиками функции является тип возвращаемого значения и список типов формальных параметров. Подобно тому, как имена переменных никаким образом не влияют на их тип,

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

Функция line().
  Функция line() - вычерчивает линию между двумя заданными точками принадлежит библиотеке graphics.h Общий вид вызова: void line(int x1, int y1, int x2, int

Функция lineto().
  Функция lineto() чертит линию от текущей позиции курсора в точку с координатами (x,y)Расположена в библиотеке graphics.h Общий вид вызова функции: void li

Функция circle().
  Функция circle() вычерчивает окружность заданного радиуса из заданного центра. Функция находится в графической библиотеке graphics.h В качестве параметров передаются коорди

Функция rectangle ()
  Назначение функции rectangle () в вычерчивании прямоугольника. Функция rectangle () вычерчивает прямоугольник, используя при этом текущие тип линии, толщину и цвет

ФОРМАТИРОВАННЫЙ ПОТОКОВЫЙ ВВОД-ВЫВОД.
  В примерах программ рассмотренных выше, использовались операции помещения в поток << , например в стандартный поток вывода cout и операцией извлечения из потока >>, прим

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги