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

Introduction

В Си все функции в исполняемом файле вызываются из функции 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 это встроено по умолчанию .

Article author: Andrei Olegovich

Похожие статьи
Development на C
Учебник по Си
Boolean в Си
Сокеты в Си
К и Р
Что такое argc, char * argv[]
Функция scanf()
Указатели
Структуры в Си
Оператор «стрелка» указатель на член структуры

Search this site

Channel @aofeed Chat @aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: