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