Ответ 1
Когда вы пишете свою основную функцию, вы обычно видите одно из двух определений:
-
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
по умолчанию.
[[email protected] c_code]$ gcc -std=c99 args.c
Теперь запустите его...
[[email protected] 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
.