编写主函数时,通常会看到两个定义之一:
int main(void)
int main(int argc, char **argv)
第二种形式允许您访问传递给程序的命令行参数,以及指定的参数数量(参数以空格分隔)。
的参数为main:
int argc-运行程序时传递给您的程序的参数数量。至少是1。
char **argv-这是指向的指针char *。也可以是:char *argv[],表示“数组char *”。这是C样式字符串指针的数组。
基本范例
例如,您可以执行以下操作以打印出传递给C程序的参数:
#include
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
#include
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类的库。