当您编写 main 函数时,您通常会看到以下两个定义之一:
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 这样的库。