Как запускать программу с аргументами

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

Как и любая другая функция, функция main() может иметь параметры. Иногда при запуске программы бывает полезно передать ей какую-либо информацию. Такая информация передается функции main() с помощью аргументов командной строки. Аргументы командной строки – это информация, которая вводится в командной строке вслед за именем программы при запуске программы на выполнение не из среды разработки программы. Например, чтобы запустить архивацию файла task.cpp, необходимо в командной строке набрать следующее:

winrar a archTask task.cpp // winrar.exe a archTask task.cpp

где winrar – имя программы-архиватора, а строки «a», «archTask» и «task.cpp» представляет собой аргументы командной строки, которые говорят программе, что надо создать архив («a») с именем archTask из одного файла task.cpp.

При передаче параметров в функцию main() ее надо определять так:

int main(int argc, char *argv[]) < >// или void main(. )<>

Уроки C# – Аргументы командной строки – GetCommandLineArgs

Параметр argc содержит количество аргументов в командной строке и является целым числом, причем он всегда не меньше 1, потому что первым аргументом всегда передается имя программы (имя программы с полным путем к программе ).

Параметр argv является указателем на массив указателей на строки. В этом массиве каждый элемент указывает на очередной аргумент командной строки. Пустые квадратные скобки указывают на то, что у массива неопределенная длина. Получить доступ к отдельным аргументам можно с помощью индексации массива argv.

Например, argv[0] указывает на первую символьную строку, которой всегда является имя программы; argv[1] указывает на первый аргумент и так далее. Список аргументов ограничен NULL, т.е. argv[argc] == NULL.

Чтобы получить доступ к отдельному символу одного из аргументов командной строки, надо использовать в argv второй индекс. Т.е., первый индекс argv обеспечивает доступ к строке, а второй индекс – доступ к ее отдельным символам.

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

Пример программы с разными способами перевода чисел в символьном формате в целые и вещественные числа:

// при запуске задаем, например, такие аргументы: 100 2.7

void main(int a, char *b[])

k = strtol(b[1], // ptr = адрес места ошибки в строке

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

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

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

printf(«Неверные параметры запуска программы!n»);

k = atoi(argv[3]); // преобразование параметра-числа

printf(«Привет, %s из группы %s %d-го курса»,

Если имя программы – task, а ваше имя «Вася», группа «ПМ-11» с первого курса, то для запуска программы следует в командную строку ввести:

argc argv c++ что это. Параметры функции main argc argv. Аргументы main. C ++ Урок #70

task Вася ПМ-11 1

В результате выполнения программы на экране появится сообщение: «Привет, Вася из группы ПМ-11 1-го курса».

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

Аргументы командной строки необходимо отделять друг от друга пробелом. Если в самом аргумента есть пробелы, то, чтобы из него не получилось несколько аргументов, этот аргумент надо заключать в двойные кавычки. В результате вся строка в кавычках будет считаться одним аргументом. Например, программу можно запустить так: task “Вася и Петя” ПМ-21 2. В результате выполнения программы на экране появится сообщение: «Привет, Вася и Петя из группы ПМ-21 2-го курса».

Читайте также:
Для чего нужна программа Mozilla maintenance service

Что такое char *argv[]? Это массив, элементами которого служат указатели, то есть массив указателей. Значит при передаче параметров в main() ее можно определять и так:

void main(int argc, char **argv)

Задача. Вывести на экран все аргументы командной строки (имя программы выводить не надо).

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

Источник: studfile.net

Запустите приложение Java из командной строки

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

Здесь мы сосредоточимся на сценарии автономного приложения. С этого момента мы будем называть его JAR-приложением.

В этом руководстве мы сначала узнаем, как создать приложение JAR. Позже мы узнаем, как запускать приложение JAR с аргументами командной строки или без них.

2. Создайте JAR — приложение​

Файл JAR может содержать один или несколько основных классов. Каждый основной класс является точкой входа приложения. Таким образом, файл JAR теоретически может содержать более одного приложения, но для запуска он должен содержать хотя бы один основной класс.

Файл JAR может иметь одну точку входа, установленную в его файле манифеста . В этом случае JAR-файл является исполняемым JAR -файлом . Основной класс должен быть включен в этот файл JAR.

Во-первых, давайте посмотрим на быстрый пример того, как скомпилировать наши классы и создать исполняемый JAR с файлом манифеста:

$ javac com/foreach/jarArguments/*.java $ jar cfm JarExample.jar ../resources/example_manifest.txt com/foreach/jarArguments/*.class

Неисполняемый JAR — это просто файл JAR, для которого не определен основной класс в файле манифеста. Как мы увидим позже, мы по-прежнему можем запускать основной класс, содержащийся в самом JAR-файле.

Вот как мы создадим неисполняемый JAR без файла манифеста:

$ jar cf JarExample2.jar com/foreach/jarArguments/*.class

3. Аргументы командной строки Java​

Как и любое приложение, приложение JAR принимает любое количество аргументов, включая нулевые аргументы. Все зависит от потребности приложения.

Это позволяет пользователю указать информацию о конфигурации при запуске приложения.

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

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

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

Однако это не всегда так для приложений JAR.

Как мы уже говорили, точкой входа основного класса Java является метод main . Все аргументы представляют собой String и передаются основному методу в виде массива String .

При этом внутри приложения мы можем преобразовать любой элемент массива String в другие типы данных, такие как char , int , double , их классы-оболочки или другие подходящие типы.

4. Запустите исполняемый файл JAR с аргументами​

Давайте посмотрим на основной синтаксис для запуска исполняемого файла JAR с аргументами:

java -jar имя-файла-jar [аргументы …]

Созданный ранее исполняемый файл JAR представляет собой простое приложение, которое просто распечатывает переданные аргументы. Мы можем запустить его с любым количеством аргументов.

Вот пример с двумя аргументами:

main аргументы функции и командной строки

Все программы C++ должны иметь функцию main . При попытке скомпилировать программу C++ без main функции компилятор выдает ошибку. (Библиотеки и static библиотеки динамической main компоновки не имеют функции.) Функция main — это место, где начинается выполнение исходного кода, но перед тем, как программа войдет в функцию main , все static члены класса без явных инициализаторов задаются равным нулю. В Microsoft C++ глобальные static объекты также инициализируются перед записью в main . К функции применяются некоторые main ограничения, которые не применяются к другим функциям C++. Функция main :

  • Не удается перегрузить (см. раздел Перегрузка функций).
  • Не может быть объявлен как inline .
  • Не может быть объявлен как static .
  • Не может быть принято его адрес.
  • Не удается вызвать из программы.

Сигнатура main функции

Функция main не имеет объявления, так как она встроена в язык. Если это так, синтаксис объявления для main будет выглядеть следующим образом:

Читайте также:
Как создавать свои программы с помощью текстового документа

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

Если возвращаемое значение не указано в main , компилятор предоставляет возвращаемое значение, равное нулю.

Стандартные аргументы командной строки

Аргументы для main обеспечивают удобный анализ аргументов из командной строки. Типы для параметров argc и argv определяются языком. Имена argc и argv являются традиционными, но вы можете назвать их как угодно.

Используются следующие определения аргументов.

argc
Целое число, содержащее количество аргументов, следующих в argv. Параметр argc всегда больше или равен 1.

argv
Массив завершающихся null строк, представляющих введенные пользователем программы аргументы командной строки. По соглашению — это команда, argv[0] с помощью которой вызывается программа. argv[1] — первый аргумент командной строки. Последний аргумент из командной строки — argv[argc — 1] , и argv[argc] всегда имеет значение NULL.

Сведения о том, как отключить обработку из командной строки, см. в разделе Настройка обработки командной строки C++.

По соглашению argv[0] — это имя файла программы. Однако в Windows можно создать процесс с помощью CreateProcess . При использовании первого и второго аргументов ( lpApplicationName и lpCommandLine ), argv[0] возможно, не является именем исполняемого файла. Вы можете использовать для GetModuleFileName получения имени исполняемого файла и его полного пути.

Расширения, относящиеся к корпорации Майкрософт

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

Функция wmain и _tmain макрос

Если вы разрабатываете исходный код для использования расширенных действий Юникода char, вы можете использовать точку входа, относяющуюся к Корпорации wmain Майкрософт, которая является версией для широкогоchar действия main . Ниже приведен действующий синтаксис объявления для wmain :

int wmain(); int wmain(int argc, wchar_t *argv[]);

Можно также использовать зависящий от _tmain Майкрософт макрос, который является макросом препроцессора, определенным в tchar.h . _tmain разрешается в , main если _UNICODE не задано значение . В противном случае функция _tmain разрешается в функцию wmain . Макрос _tmain и другие макросы, которые начинаются с _t , полезны для кода, который должен создавать отдельные версии как для узких, так и для широких charнаборов действий. Дополнительные сведения см. в разделе Использование сопоставлений универсального текста.

Возврат из void main

Как расширение Майкрософт функции main и wmain могут быть объявлены как возвращающие (без возвращаемого void значения). Это расширение также доступно в некоторых других компиляторах, но его использование не рекомендуется. Он доступен для симметрии, если main не возвращает значение.

Если вы объявите main или wmain как возвращающий void , вы не сможете вернуть exit код родительскому процессу или операционной системе с помощью инструкции return . Чтобы вернуть exit код, если main или wmain объявлен как void , необходимо использовать функцию exit .

Аргумент envp командной строки

Сигнатуры main или wmain позволяют дополнительному расширению майкрософт для доступа к переменным среды. Это расширение также распространено в других компиляторах для систем Windows и UNIX. Это традиционное имя envp , но параметру среды можно присвоить любое имя. Ниже приведены действующие объявления для списков аргументов, включающих параметр среды:

int main(int argc, char* argv[], char* envp[]); int wmain(int argc, wchar_t* argv[], wchar_t* envp[]);

envp
Необязательный envp параметр представляет собой массив строк, представляющих переменные, заданные в среде пользователя. Этот массив завершается записью NULL. Его можно объявить как массив указателей на char () или как указатель на ( char char **envp ). char *envp[] Если программа использует wmain вместо main , используйте wchar_t тип данных вместо char .

Блок среды, передаваемый main в и wmain , является «замороженной» копией текущей среды. Если позже вы измените среду путем вызова putenv или _wputenv , текущая среда (возвращенная getenv или _wgetenv и _environ переменная или _wenviron ) изменится, но блок, на который envp указывает , не изменится. Дополнительные сведения о том, как отключить обработку среды, см. в разделе Настройка обработки командной строки C++. Аргумент envp совместим со стандартом C89, но не со стандартами C++.

Примеры аргументов для main

В следующем примере показано, как использовать argc аргументы , argv и envp для main :

// argument_definitions.cpp // compile with: /EHsc #include #include using namespace std; int main( int argc, char *argv[], char *envp[] ) < bool numberLines = false; // Default is no line numbers. // If /n is passed to the .exe, display numbered listing // of environment variables. if ( (argc == 2) _stricmp( argv[1], «/n» ) == 0 ) numberLines = true; // Walk through list of strings until a NULL is encountered. for ( int i = 0; envp[i] != NULL; ++i ) < if ( numberLines ) cout >

Читайте также:
Программа фосстис пример презентации

Анализ аргументов командной строки C++

Правила анализа командной строки, используемые кодом Microsoft C/C++, зависят от корпорации Майкрософт. Код запуска среды выполнения использует следующие правила при интерпретации аргументов, заданных в командной строке операционной системы:

  • Аргументы разделяются пробелами (пробел или табуляция).
  • Первый аргумент ( argv[0] ) обрабатывается особым образом. Он представляет имя программы. Это должен быть допустимый путь, поэтому разрешены части, заключенные в двойные кавычки ( » ). Эти знаки двойных кавычек не включаются в выходные данные argv[0] . Части, заключенные в двойные кавычки, предотвращают интерпретацию пробела или табуляции charв качестве конца аргумента. Последующие правила в этом списке не применяются.
  • Строка, заключенная в двойные кавычки, интерпретируется как один аргумент, который может содержать charпробелы. Строку в кавычках можно встроить в аргумент. Курсор ( ^ ) не распознается как escape-действие charили разделитель. Внутри заключенной в кавычки строки пара двойных кавычек интерпретируется как одна экранированная двойная кавычка. Если командная строка заканчивается до того, как будет найдена закрывающая двойная кавычка, то в качестве последнего аргумента выводятся все charсчитанные до сих пор действия.
  • Символ двойной кавычки после обратной косой черты ( » ) интерпретируется как литеральный символ двойной кавычки ( » ).
  • Символы обратной косой черты считаются литералами, если сразу за ними не стоит двойная кавычка.
  • Если двойная кавычка стоит после четного числа символов обратной косой черты, в массив argv помещается по одному символу обратной косой черты ( ) для каждой пары символов обратной косой черты ( \ ), а сама двойная кавычка ( » ) интерпретируется как разделитель строк.
  • Если двойная кавычка стоит после нечетного числа символов обратной косой черты, в массив argv помещается по одному символу обратной косой черты ( ) для каждой пары символов обратной косой черты ( \ ). Двойная кавычка интерпретируется обратной косой чертой remaining как escape-последовательность, в результате чего литерал двойной кавычки ( » ) помещается в argv .

Пример анализа аргументов командной строки

В следующем примере программы показана передача аргументов командной строки:

// command_line_arguments.cpp // compile with: /EHsc #include using namespace std; int main( int argc, // Number of strings in array argv char *argv[], // Array of command-line argument strings char *envp[] ) // Array of environment variable strings < int count; // Display each command-line argument. cout

Результаты анализа командных строк

В следующей таблице показаны примеры входных данных и ожидаемые выходные данные, иллюстрирующие применение правил из приведенного выше списка.

Входные данные в командной строке argv[1] argv[2] argv[3]
«abc» d e abc d e
a\b d»e f»g h a\b de fg h
a\»b c d a»b c d
a\\»b c» d e a\b c d e
a»b»» c d ab» c d

Развертывание подстановочных знаков

Компилятор Майкрософт при необходимости позволяет использовать подстановочные знакиchar, вопросительный знак ( ? ) и звездочку ( * ), чтобы указать аргументы имени файла и пути в командной строке.

Аргументы командной строки обрабатываются внутренней подпрограммой в коде запуска среды выполнения, которая по умолчанию не расширяет подстановочные знаки на отдельные строки в строковом массиве argv . Вы можете включить расширение с подстановочными знаками, включив setargv.obj файл ( wsetargv.obj файл для wmain ) в /link параметры компилятора или в командной строке LINK .

Дополнительные сведения о параметрах компоновщика для запуска среды выполнения см. в статье Параметры ссылок.

Настройка обработки из командной строки C++

Если программа не принимает аргументы командной строки, можно сохранить небольшой объем пространства, подавив подпрограмму обработки командной строки. Для этого включите файл noarg.obj (для main и wmain ) в параметры компилятора /link или командную строку LINK .

Аналогичным образом, если вы никогда не использовали таблицу среды для доступа к аргументу envp , можно подавить внутреннюю подпрограмму обработки среды. Для этого включите файл noenv.obj (для main и wmain ) в параметры компилятора /link или командную строку LINK .

Программа может вызывать семейство подпрограмм spawn или exec в библиотеке среды выполнения C. В этом случае не следует подавлять подпрограмму обработки среды, так как она используется для передачи данных о среде из родительского процесса в дочерний.

Источник: learn.microsoft.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru