Вы уже видели использование аргументов или параметров в наших предыдущих статьях. Вы также уже знаете какова цель передачи аргументов в/из функций.
Помимо прочего, вы можете передавать аргументы в функцию main. Аргументы, в свою очередь, известны как «аргументы командной строки или параметры командной строки».
Что такое аргументы командной строки?
Мы уже знаем базовый прототип функции main в C++. Обычно он имеет возвращаемый тип int и ему не передаются никакие аргументы.
1 |
int main() |
Однако мы также можем передавать аргументы основной функции C++, известные как аргументы командной строки. Аргументы командной строки задаются после имени программы во время выполнения программы в оболочке командной строки.
Для передачи аргументов командной строки основная функция передается с двумя аргументами. Затем прототип основной функции изменяется на:
1 |
int main(int argc, char* argv[]){} |
или
1 |
int main(int argc, char** argv){} |
Эти два аргумента описаны ниже:
1) Количество аргументов (ARGC)
Это неотрицательный целочисленный аргумент, который содержит количество аргументов командной строки, включая имя программы. Таким образом, если передано имя программы, то argc будет иметь значение 1.
2) Вектор аргумента (ARGV)
Argv — это массив указателей на символы, содержащий все аргументы командной строки, переданные в основную функцию. Если argc больше нуля, то argv[0] будет содержать имя программы. Argv [1] в argv [argc -1] будут содержать другие аргументы командной строки.
Как прочитать/получить аргументы командной строки?
Познакомившись с параметрами, которые содержат количество и фактические аргументы командной строки, давайте посмотрим, как мы можем использовать аргументы командной строки в программе на C++.
Обратите внимание, что нам нужно запустить программу из оболочки командной строки, чтобы получить полную функциональность аргументов командной строки.
Во-первых, давайте посмотрим на вывод программы, где мы не указываем никаких аргументов командной строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> using namespace std; int main(int argc, char** argv) { cout << "Number of command line arguments (argc) entered: " << argc<<endl; for (int i = 0; i < argc; ++i) cout <<"argv["<<i<<"] : "<<argv[i] << "\n"; return 0; } |
В приведенном выше примере кода показано, как мы можем читать и анализировать аргументы командной строки.
Во-первых, мы печатаем количество аргументов командной строки, которое напрямую задается первым параметром основной функции, argc. Затем, используя цикл for, мы перебираем вектор аргументов argc, который представляет собой массив символов.
Этот цикл выполняется от 0 до argc, поскольку argc — это общее количество аргументов командной строки, которые были переданы программе во время выполнения.
Теперь мы выполним вышеуказанную программу,
1) Без передачи аргументов командной строки.
В этом случае мы выполняем вышеуказанную программу, используя следующую команду:
1 |
$ ./a.out |
Здесь мы просто выполняем программу без аргументов командной строки. Результат показан ниже. В этом случае, поскольку аргументы не предоставлены, берется только имя программы, а argc отображает 1, то есть argv[0], то есть имя программы.
Вывод данных:
Количество введенных аргументов командной строки (argc): 1
argv[0] : ./a.out
2) Передача трех аргументов командной строки.
В этом случае мы передаем три аргумента в командную строку, давая следующую команду.
1 |
$ ./a.out one two three |
Здесь мы дали три аргумента командной строки.
Когда мы выполняем приведенную выше программу с этими аргументами, мы получаем следующий вывод данных:
Количество введенных аргументов командной строки (argc): 4
argv[0] : ./a.out
argv[1] : один
argv[2] : два
argv[3] : три
Приведенный выше вывод данных показывает значение argc как 4. Оно включает имя программы и три аргумента, которые мы ввели в командной строке. Если мы видим массив argv, который мы печатаем, argv[0] — это имя программы, а последующие элементы массива содержат три аргумента, которые мы передали.
Моменты, которые нужно запомнить:
- В аргументах командной строки argv[argc] является указателем NULL.
- Argv[0] всегда содержит имя программы.
- Argv[1] содержит первый аргумент командной строки, а argv[n] — последний аргумент командной строки.
Аргументы командной строки передаются в основную функцию. - Мы должны передавать аргументы командной строки, когда программа вызывается или выполняется.
- Аргументы командной строки управляют программой извне, когда мы передаем аргументы через командную строку.
Итог
В этой статье мы рассмотрели аргументы командной строки C++. Аргументы действительно нужны, особенно, когда нам нужно управлять программой извне. Также вместо жесткого кодирования некоторых значений в программе мы можем использовать аргументы командной строки для передачи этих значений.
В следующей статье мы подробно поговорим о директивах препроцессора в C++.
С Уважением, МониторБанк