Аргументы argc
и argv
из main
используется как способ отправить аргументы в программе, возможно, наиболее привычный способ заключается в использовании старого доброго терминала, где пользователь может ввести cat file
. Здесь слово cat
- это программа, которая берет файл и выводит его на стандартный вывод (stdout
).
Программа получает количество аргументов в argc
и вектор аргументов в argv
, в выше агде ument с р а ф будет два (Отсчеты названия программы в качестве первого аргумента) и Arg ument v ector будет содержать [cat
, file
, null]. Хотя последний элемент является нулевым указателем.
Обычно, можно было бы написать так:
int // Specifies that type of variable the function returns.
// main() must return an integer
main (int argc, char **argv) {
// code
return 0; // Indicates that everything went well.
}
Если ваша программа не требует каких-либо аргументов, то в равной степени относится написать main
-функции в следующем виде:
int main() {
// code
return 0; // Zero indicates success, while any
// Non-Zero value indicates a failure/error
}
В ранних версиях языка C не было int
до main
, поскольку это подразумевалось. Сегодня это считается ошибкой.
На POSIX -совместимый систем (и Windows), существует возможность использовать третий параметр char **envp
, который содержит вектор программ environment variables. Дальнейшие вариации списка аргументов функции main
существуют, но я не буду здесь подробно останавливаться, поскольку он нестандартен.
Кроме того, обозначение переменных является соглашением и не имеет фактического значения. Это всегда хорошая идея, чтобы придерживаться этого, так что вы не путайте другие, но это было бы в равной степени справедливо для определения main
в
int main(int c, char **v, char **e) {
// code
return 0;
}
И для вашего второго вопроса, то есть несколько способов отправки аргументов в программа. Я бы порекомендовал вам взглянуть на exec*()
family of functions которая POSIX Нестандартный, но это, вероятно, проще просто использовать system
("command arg1 arg2")
, но использование system()
обычно неодобрением, как это не гарантировано работать на любой системе. Я сам не проверял; но если нет bash
, zsh
или другой оболочки, установленной в * NIX-системе, system()
не удастся.
Обратите внимание, что если вы не собираетесь использовать аргументы командной строки, вполне допустимо (и очень разумно) определить функцию 'int main (void)' или 'int main()'. Тип возврата ('int') является обязательным в C99 или C11; компиляторы иногда позволяют вам опустить его, если вы не укажете, к какой версии стандарта C ваш код придерживается. См. Также [Что должно быть 'main()' return in C и C++] (http://stackoverflow.com/questions/204476/). –