Перейти к содержимому

Int tmain int argc tchar argv что это

  • автор:

Int tmain int argc tchar argv что это

В прошлых темах функция main определялась без параметров. Однако также можно определить данную функцию с параметрами:

int main(int argc, char* argv[]) < // инструкции >

Первый параметр, argc , представляет тип int и хранит количество аргументов командной строки. Второй параметр, argv[] , представляет собой массив указателей и хранит все переданные аргументы командной строки в виде строк. Таким образом, благодаря данным параметрам мы можем при вызове программы в консоли передать ей некоторые данные.

Например, определим следующую программу:

#include int main(int argc, char* argv[]) < // выводим все переданные аргументы в цикле for (int i <>; i < argc; ++i) < std::cout >

В данном случае просто выводим все аргументы командной строки на консоль. Скомпилируем и просто запустим программу, не передавая ей никаких аргументов:

c:\cpp>g++ hello.cpp -o hello & hello hello

В моем случае код программы расположен в файле «hello.cpp» и компилируется в файл с именем hello. После запуска программы, даже если мы не передаем ей никакх аргументов, в массиве argv[] будет как минимум один элемент — название файла программы. То есть в моем случае в массиве будет одна строка «hello». А первый параметр, argc , будет равен 1.

Передадим программе какие-нибудь аргументы

c:\cpp>g++ hello.cpp -o hello & hello Tom 38 hello Tom 38

Здесь программе при запуске передается два значения — «Tom» и «38». Передаваемые аргументы разделяются пробелом. Причем даже если передается число (как в случае с вторым аргументом), то программа все равно получает его в виде строки. Соответственно теперь в массиве argv будет три элемента.

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

В языке C заданы два встроенных аргумента функции main: argc и argv.

Выглядит это так:

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

Аргумент argc типа integer содержит в себе количество аргументов командной строки.

Аргумент argv типа char — указатель на массив строк. Каждый элемент массива указывает на аргументы командной строки. Один параметр отделяется от другого пробелами.

  • argv[0] — полное имя запущенной программы
  • argv[1] — первая строка записаная после имени программы
  • argv[2] — вторая строка записаная после имени программы
  • argv[argc-1] — последняя строка записаная после имени программы
  • argv[argc] — NULL

В средах разработки фирмы Borland (Borland Builder C++, Borland C++ и т.п.) предусмотрен еще и третий аргумент env, который, так же как и argv является указателем на массив строк, но содержит установки среды:

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

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

#include «stdio.h» #include «stdlib.h» int main(int argc, char *argv[], char *env[])

Параметры функции main (argc, argv)

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

int main(int argc, char* argv[]) // параметры функции main()

Эта строка — заголовок главной функции main() , в скобочках объявлены параметры argс и argv. Так вот, если программу запускать через командную строку, то существует возможность передать какую-либо информацию этой программе, для этого и существуют параметры argc и argv[] . Параметр argc имеет тип данных int , и содержит количество параметров, передаваемых в функцию main . Причем argc всегда не меньше 1, даже когда мы не передаем никакой информации, так как первым параметром считается имя функции. Параметр argv[] это массив указателей на строки. Через командную строку можно передать только данные строкового типа. Указатели и строки — это две большие темы, под которые созданы отдельные разделы. Так вот именно через параметр argv[] и передается какая-либо информация. Разработаем программу, которую будем запускать через командную строку Windows, и передавать ей некоторую информацию.

// argc_argv.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include using namespace std; int main(int argc, char* argv[]) < if (argc >1)// если передаем аргументы, то argc будет больше 1(в зависимости от кол-ва аргументов) < cout else < cout system("pause"); return 0; >
// argc_argv.cpp: определяет точку входа для консольного приложения. #include using namespace std; int main(int argc, char* argv[]) < if (argc >1)// если передаем аргументы, то argc будет больше 1(в зависимости от кол-ва аргументов) < cout else < cout return 0; >

После того как отладили программу, открываем командную строку Windows и перетаскиваем в окно командной строки экзэшник нашей программы, в командной строке отобразится полный путь к программе(но можно прописать путь к программе в ручную), после этого можно нажимать ENTER и программа запустится (см. Рисунок 1).

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

Рисунок 1 — Параметры функции main

Так как мы просто запустили программу и не передавали ей никаких аргументов, появилось сообщение Not arguments . На рисунке 2 изображён запуск этой же программы через командную строку, но уже с передачей ей аргумента Open .

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

Рисунок 2 — Параметры функции main

Аргументом является слово Open , как видно из рисунка, это слово появилось на экране. Передавать можно несколько параметров сразу, отделяя их между собой запятой. Если необходимо передать параметр состоящий из нескольких слов, то их необходимо взять в двойные кавычки, и тогда эти слова будут считаться как один параметр. Например, на рисунке изображен запуск программы, с передачей ей аргумента, состоящего из двух слов — It work .

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

Рисунок 3 — Параметры функции main

А если убрать кавычки. То увидим только слово It . Если не планируется передавать какую-либо информацию при запуске программы, то можно удалить аргументы в функции main() , также можно менять имена данных аргументов. Иногда встречается модификации параметров argc и argv[] , но это все зависит от типа создаваемого приложения или от среды разработки.

К сожалению, для данной темы пока нет подходящих задач. Если у вас есть таковые на примете, отправте их по адресу: admin@cppstudio.com. Мы их опубликуем!

Что такое argc, char * argv[] в Си

В Си все функции в исполняемом файле вызываются из функции main ().

Функция main () тоже должна быть вызвана. Например, из bash .

Вызов может быть как без аргументов, так и с аргументами.

Начнём с первого варианта

Вызов без аргументов

Если Вы не собираетесь использовать аргументы командной строки, то можно писать int main ()

Что вообще под этим имеется в виду:

Рассмотрим простейшую программу, которую мы написали в файле hello_world.c

#include int main ( int argc, char * argv[])

Предположим, что мы скомпилировали наш hello_world.c в object файл hello_world командой

gcc -o hello_world hello_world.c

И теперь выполняем

Нам совершенно не важно написано

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

просто int main ()

В какой момент это станет важным?

— В тот момент когда нужно будет вызывать с аргументами

Вызов с аргументами

argc — argument count — это количество аргументов командной строки.

Тип argc — int

Минимально значение argc это 1. argv[0] это имя программного файла (в нашем случае программный файл это hello_world.c).

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

char * — это тип возвращаемого значени

argv[] — argument vector — массив значений этих аргументов

Рассмотрим другую программу, написанную в файле example.c

Она будет ожидать два аргумента типа int .

В коде они будут называться a1 и a2. Обратите внимание на седьмую и восьмую строки.

#include #include int main ( int argc, char * argv[])

Скомпилируйте этот код командой

gcc -o example example.c

Осталось вызвать программу и передать при вызове аргументы прямо в командной строке.

File name = ./example
7 9

Мы вызываем example и прямо в командной строке передаём два аргумента.

Сперва мы убедились что argv[0] это действительно имя файла. Затем увидели переданные аргументы

Теперь, если Вы захотите убрать int argc, char * argv[] из main

Компилятор Вас не поймёт и пожалуется на необъявленные argv

example.c: In function ‘main’: example.c:7:16: error: ‘argv’ undeclared (first use in this function) int a0=atoi(argv[0]); ^~~~ example.c:7:16: note: each undeclared identifier is reported only once for each function it appears in

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

gcc -o example example.c
./example 7 9

В других языках

В Python аналогичную функцию выполняет sys.argv

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *