Во многих IDE и компиляторах C++, когда он генерирует для вас главную функцию, она выглядит следующим образом:
int main(int argc, char *argv[])
Когда я кодирую C++ без IDE, просто с помощью компилятора командной строки, я набираю:
int main()
без каких-либо параметров. Что это значит, и жизненно ли это важно для моей программы?
argv
и argc
- это способ передачи аргументов командной строки в main()
в C и C++.
argc
- это количество строк, на которые указывает argv
. На практике это будет 1 плюс количество аргументов, так как практически во всех реализациях к массиву будет добавляться имя программы.
Переменные названы argc
(счетчик аргументов) и argv
(вектор аргументов) по соглашению, но им можно дать любой допустимый идентификатор: int main(int num_args, char** arg_strings)
одинаково корректно.
Их также можно опустить, получив int main()
, если вы не собираетесь обрабатывать аргументы командной строки.
Попробуйте выполнить следующую программу:
#include <iostream>
int main(int argc, char** argv) {
std::cout << "Have " << argc << " arguments:" << std::endl;
for (int i = 0; i < argc; ++i) {
std::cout << argv[i] << std::endl;
}
}
Если запустить ее с помощью ./test a1 b2 c3
, то будет выведен результат
Have 4 arguments:
./test
a1
b2
c3
argc
- это количество аргументов, передаваемых в вашу программу из командной строки, а argv
- массив аргументов.
Вы можете перебирать аргументы, зная их количество, следующим образом:
for(int i = 0; i < argc; i++)
{
// argv[i] is the argument at index i
}
Предположим, вы запустите вашу программу таким образом (через " ш " синтаксис):
myprog arg1 arg2 'arg 3'
Если вы заявили о своей главной, как `int основной(АГДС, типа char *переменной argv []), то (в большинстве случаев), ваш основной () будет вызываться, как если бы как:
p = { "myprog", "arg1", "arg2", "arg 3", NULL };
exit(main(4, p));
Однако, если вы объявили о своей главной, как int основной()
, это будет называться что-то вроде
exit(main());
и вы Don'т получить аргументы.
Две дополнительные вещи, чтобы отметить:
*из argv[]
и **агду
полностью эквивалентны, так что вы можете писать int основной(АГДС, типа char *переменной argv[])
в int основной(АГДС, типа char **argv в)
.Параметры main
представляют собой параметры командной строки, заданные программе при запуске. Параметр argc
представляет количество аргументов командной строки, а char *argv[]
- массив строк (указателей символов), представляющих отдельные аргументы, предоставленные в командной строке.
int main();
Это простая декларация. Он не может принимать аргументы командной строки.
int main(int argc, char* argv[]);
Это заявление используется, когда ваша программа должна принимать аргументы командной строки. При работе такие:
myprogram arg1 arg2 arg3
АГДС
, или аргумент считать, будет 4 (четыре аргумента), и слева
, или аргумент векторов, будут заполнены строки указатели, чтобы "иногда" и "Ну арг1-то", то "арг2-то", и "значение arg3-то". Вызов программы (иногда
) включается в аргументы!
В качестве альтернативы, вы могли бы использовать:
int main(int argc, char** argv);
Это тоже действует.
Есть еще один параметр, который можно добавить:
int main (int argc, char *argv[], char *envp[])
Параметра параметре envp также содержит переменные окружения. Каждая запись в следующем формате:
VARIABLENAME=VariableValue
как это:
SHELL=/bin/bash
Переменные среды список является нулем.
Важно: не используйте слева
или параметре envp
значения непосредственно в вызовы System ()
! Это огромный ** дыра в безопасности, поскольку злоумышленники могут устанавливать переменные окружения в командной строке команды и (потенциально) нанести большой ущерб. В общем, просто не'т использовать систему()
. Там почти всегда лучшее решение реализуется через библиотеки.
В функции main
может иметь два параметра, АГДС и argv в
. АГДС является целочисленный параметр (
интервал`), и это количество аргументов, переданных программе.
Название программы-это всегда первый аргумент, так что будет как минимум один аргумент для программы и минимальное значение `АГДС будет один. Но если программа сама два аргумента значение АГДС будет три.
Параметр argv, которая указывает на строковый массив и называется векторного аргумента. Это одномерный строковый массив аргументов функции.
Первый параметр-количество предоставленных аргументов и второй параметр-это список строк, представляющих эти аргументы.
Оба
int main(int argc, char *argv[]);
int main();
юридические определения точки входа на C или C++ программе. Страуструп: язык C++ стиль и техника вопросы и ответы подробно описаны некоторые варианты, которые возможны или права на свой основной функции.