Что такое argc, char * argv[]

Введение

В Си все функции в исполняемом файле вызываются из функции main().

Функция main() тоже должна быть вызвана. Например, из bash .

Вызов может быть как без аргументов, так и с аргументами.

Начнём с первого варианта

Вызов без аргументов



Если Вы не собираетесь использовать аргументы командной строки, то можно писать int main()

Что вообще под этим имеется в виду:

Рассмотрим простейшую программу, которую мы написали в файле hello_world.c

#include <stdio.h> int main(int argc, char* argv[]) { printf("Hello, World!\n"); return 0; }

Предположим, что мы скомпилировали наш hello_world.c в object файл hello_world командой

gcc -o hello_world hello_world.c

И теперь выполняем

./hello_world

Нам совершенно не важно написано

int main(int argc, char* argv[])

или

просто int main()

В какой момент это станет важным?

- В тот момент когда нужно будет вызывать с аргументами

Вызов с аргументами

argc - argument count - это количество аргументов командной строки.

Тип argc - int

Минимально значение argc это 1. argv[0] это имя программного файла (в нашем случае программный файл это hello_world.c).

Си это очень старый язык, созданный задолго до появления современных графических интерфейсов.

char* - это тип возвращаемого значени

argv[] - argument vector - массив значений этих аргументов

Рассмотрим другую программу, написанную в файле example.c

Она будет ожидать два аргумента типа int .

В коде они будут называться a1 и a2. Обратите внимание на седьмую и восьмую строки.

#include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { int a1 = atoi(argv[1]); int a2 = atoi(argv[2]); printf("File name = %s\n",argv[0]); printf(" %d %d \n", a1, a2); return 0; }

Скомпилируйте этот код командой

gcc -o example example.c

Осталось вызвать программу и передать при вызове аргументы прямо в командной строке.

./example 7 9

File name = ./example
7 9

Мы вызываем example и прямо в командной строке передаём два аргумента.

Сперва мы убедились что argv[0] это действительно имя файла. Затем увидели переданные аргументы

Теперь, если Вы захотите убрать int argc, char* argv[] из main

int main()

Компилятор Вас не поймёт и пожалуется на необъявленные argv

example.c: In function ‘main’: example.c:7:16: error: ‘argv’ undeclared (first use in this function) int a0=atoi(argv[0]); ^~~~ example.c:7:16: note: each undeclared identifier is reported only once for each function it appears in

Если убрать все упоминания о аргументах командной строки из кода и попробовать запустить программу с аргументами - они буду проигнорированы.

#include <stdio.h> #include <stdlib.h> int main() { return 0; }

gcc -o example example.c
./example 7 9

В других языках

В Python аналогичную функцию выполняет sys.argv

В Bash это встроено по умолчанию .

Статьи о Си:
Учебник по Си
Boolean в Си
Сокеты в Си
К и Р
Функция scanf()
Указатели
Структуры в Си
Оператор «стрелка» указатель на член структуры
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: