Аргументы функции main

106
01 сентября 2019, 05:20

Здравствуйте, меня интересует main функция с параметрами, часто вижу запись в чужых исходниках, да и в своих (пишу эту часть неосознанно)

 int main(int argc, char **argv)

Как эти параметры передаются в функцию при ее вызове и что они вобще значат, спасибо.

Answer 1

Это параметры, которые передаются программе при запуске.

argc - количество этих параметров. argv - указатель на массив указателей на строки, каждая из которых содержит один параметр. Параметры передаются в виде строк Си. Еще бывает такая запись - char* argv[]

В структуре памяти процесса Линукса они находятся в стеке сразу за стеком функции main. Думаю, в других системах то же устройство.

Answer 2

Вам тут показали на примерах. Забыли правда про третий параметр main() ссылку на вектор переменных окружения ОС (environment, те, которые в Shell устанавливаются командой export).

Вообще полностью:

int main (int ac, char **argv, char **env)

Почитайте также man execl.

Answer 3

Это стандртная вещь в C/C++

  • argc - количество аргументов в командной строке
  • *argv[] - массив указателей на строки, содержащие эти аргументы

При этом argv[0] - это имя команды, а argv[argc] - это NULL.

Answer 4

baz.cpp:

#include <iostream>
int main(int argc, char** argv) {
    std::cout << "argc: " << argc << "\n";
    for (int i =0; i < argc; ++i)
        std::cout << i << ": " << argv[i] << "\n";
}

Смотрим:

$ g++ baz.cpp -o boo
$ ./boo foo
argc: 2
0: ./boo
1: foo
Answer 5

Если ваша прога будет называться myprog, то допустим вы вызываете ее с параметрами так:

myprog param1, param2, param3

Соответственно в main() вы получите:

argc=3 //количество параметров
argv[0]="param1"; //1-й параметр
argv[1]="param2"  //2-й параметр
argv[3]="param3"  //3-й параметр

При этом если при завершении проги вы вернете в main() return 2; то ось получит exit code равное 2 (в Windows это называется errorlevel)

Update Спорол лажу с примером - исправляю:

myprog param1 param2 param3

Соответственно в main() вы получите:

argc=4 //количество параметров
argv[0]="myprog"; //название запускаемого файла
argv[1]="param1"  //1-й параметр
argv[2]="param2"  //2-й параметр
argv[3]="param3"  //3-й параметр
READ ALSO
Boost async_read_some serial port

Boost async_read_some serial port

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

111
Перевести строки из текстового файла в QML TableView

Перевести строки из текстового файла в QML TableView

Есть содержимое текстового файла:

135
Как создать QList &lt;QList &lt;QImage&gt;&gt; SourceImageList; в котором каждый QList &lt;QImage&gt; был бы с определённым индексом?

Как создать QList <QList <QImage>> SourceImageList; в котором каждый QList <QImage> был бы с определённым индексом?

Мне надо каждому QList ImageList; присвоить определённый индекс

143
Оптимизация и статические функции

Оптимизация и статические функции

Вопрос навеян следующим утверждением:

132