Когда вы пишете свою основную функцию, вы обычно видите одно из двух определений:
int main(void)
int main(int argc, char **argv)
ВтороеФорма позволит вам получить доступ к аргументам командной строки, переданным программе, и указанному количеству аргументов (аргументы разделены пробелами).
Аргументы main
:
int argc
- количество аргументов, переданных в вашу программу при запуске.Это как минимум 1
. char **argv
- это указатель на char *
.В качестве альтернативы это может быть: char *argv[]
, что означает «массив из char *
».Это массив строковых указателей в стиле C.
Базовый пример
Например, вы можете сделать это, чтобы распечатать аргументы, передаваемые вашей C-программе:
#include <stdio.h>
int main(int argc, char **argv)
{
for (int i = 0; i < argc; ++i)
{
printf("argv[%d]: %s\n", i, argv[i]);
}
}
Я использую GCC 4.5 для компиляции файла, который я назвал args.c
.Он скомпилирует и создаст a.out
исполняемый файл по умолчанию.
[birryree@lilun c_code]$ gcc -std=c99 args.c
Теперь запустите его ...
[birryree@lilun c_code]$ ./a.out hello there
argv[0]: ./a.out
argv[1]: hello
argv[2]: there
Так что вы можете видеть это в argv
, argv[0]
это имя программы, которую вы запустили (это не стандартное поведение, но оно распространено. Ваши аргументы начинаются с argv[1]
и далее.
Так что, в принципе, если вы хотите один параметр, вы можете сказать,...
./myprogram integral
Простой случай для вас
И вы можете проверить, было ли argv[1]
integral
, возможно, как strcmp("integral", argv[1]) == 0
.
Итак, в вашем коде ...
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
if (argc < 2) // no arguments were passed
{
// do something
}
if (strcmp("integral", argv[1]) == 0)
{
runIntegral(...); //or something
}
else
{
// do something else.
}
}
Улучшенный синтаксический анализ командной строки
Конечно, все это было очень элементарно, и по мере того, как ваша программа получаетболее сложный, вы, вероятно, захотите более продвинутую обработку командной строки. Для этого вы можете использовать библиотеку типа GNU getopt
.