int main (int argc, char ** argv)

Дубликат:
Что такое правильное объявление основного?

Что мы подразумеваем под аргументами в этой main функции? Что они пытаются нам сказать?

int main(int argc, char** argv)

ОБНОВЛЕНИЕ: И предыдущая строка кода похожа на эту int main(int argc, char* argv[])? Если так, как мы можем сказать, что char** argv похож на char* argv[] как они не похожи с точки зрения массива?

Как это по сравнению с int main() который не имеет аргументов?

Благодарю.

Ответ 1

Параметр argc - это количество заданных параметров командной строки, включая имя исполняемого файла, при вызове исполняемого файла. Параметры отдельной командной строки находятся в массиве argv, который NULL завершен (имя и путь, используемые для вызова исполняемого файла, находятся в argv[0]).

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

Ответ 2

Wikipedia дает хорошее объяснение. Первый параметр дает вам количество аргументов командной строки, а второй дает фактические аргументы.

Ответ 3

Они представляют параметры командной строки.

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

Таким образом:

foo bar baz

в командной строке будет argc= 3, argv[0]= "foo" argv[1]= "bar" argv[2]= "baz" argv[3]= NULL

Обратите внимание, что для аргументов "flag" нет специального вложения.

grep -i foo bar.cpp bar.h

будет иметь 4 аргумента (argc = 5, включая сам grep), -i, являющийся одним из них, и это применимо, даже если следующий параметр был "значением", прикрепленным к флагом.

Заметьте, если вы создали подстановочный знак

grep -i foo *

в UNIX, по крайней мере, * будет расширен до вызова в grep, и таким образом каждый сопоставленный файл будет аргументом.

Кстати

char** argv и char* argv[]

сделать то же самое.

Кроме того, в то время как в стандарте говорится, что вы должны использовать одну из этих подписей (вы даже не должны добавлять в какие-либо константы), нет закона, который вы должны использовать с этими двумя именами переменных, но теперь это так условно, что они в значительной степени универсальный. (т.е. вы можете использовать argCount и argValues, если хотите).

Ответ 4

argc дает вам количество аргументов, и argv дает вам эти аргументы. Первый - это путь к .exe, используемый для запуска вашей программы, следующие аргументы - вызывающий ваш .exe, предоставленный в командной строке следующим образом:

my.exe arg1 arg2

В то время как

int main() {}

просто игнорирует аргументы.

Ответ 5

argv - это массив, содержащий параметры командной строки, переданные приложению. argc сообщает вам количество элементов, содержащихся в этом массиве.