Что такое 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()
Указатели
Структуры в Си
Запросы к REST API на Си
Оператор «стрелка» указатель на член структуры