int argc,char * argv 是什么意思?
在许多C ++ IDE和编译器中,当它为您生成主函数时,它看起来像这样:
int main(int argc, char *argv[])
当我编写没有IDE的C ++时,只需使用命令行编译器,我键入:
int main()
没有任何参数。 这是什么意思,对我的程序至关重要?
argv
和argc
是如何将命令行parameter passing给C和C ++中的main()
。
argc
将是argv
指向的string的数量。 这(实际上)是1加上参数的数量,因为实际上所有的实现都会在程序中join数组。
按照惯例,variables被命名为argc
( 参数计数 )和argv
( 参数向量 ),但是它们可以被赋予任何有效的标识符: int main(int num_args, char** arg_strings)
同样有效。
如果你不打算处理命令行参数,它们也可以完全省略,产生int main()
。
尝试以下程序:
#include <iostream> int main(int argc, char** argv) { std::cout << "Have " << argc << " arguments:" << std::endl; for (int i = 0; i < argc; ++i) { std::cout << argv[i] << std::endl; } }
运行./test a1 b2 c3
将会输出
Have 4 arguments: ./test a1 b2 c3
argc
是从命令行传入程序的参数数目, argv
是参数数组。
您可以通过知道它们的数量来循环参数:
for(int i = 0; i < argc; i++) { // argv[i] is the argument at index i }
假设你运行你的程序(使用sh
语法):
myprog arg1 arg2 'arg 3'
如果你将main声明为int main(int argc, char *argv[])
,那么(在大多数环境中),你的main()
将被调用,就像:
p = { "myprog", "arg1", "arg2", "arg 3", NULL }; exit(main(4, p));
但是,如果您将main声明为int main()
,则将其称为类似于
exit(main());
而你没有得到通过的参数。
还有两件事要注意:
- 这是主要的唯一两个标准授权签名。 如果一个特定的平台接受额外的参数或不同的返回types,那么这是一个扩展,不应该依赖于便携式程序。
-
*argv[]
和**argv
是完全等价的,所以你可以写int main(int argc, char *argv[])
作为int main(int argc, char **argv)
。
主要参数代表启动时提供给程序的命令行参数。 argc参数表示命令行参数的个数,char * argv []是表示命令行上提供的各个参数的string(字符指针)的数组。
第一个参数是提供的参数数量,第二个参数是表示这些参数的string列表。
main
函数可以有两个参数argc和argv 。 argc是一个整型参数,它是传递给程序的参数个数。
程序名称总是第一个参数,所以程序至less有一个参数, argc的最小值是1。 但是如果一个程序本身有两个参数,那么argc的值就是三。
参数argv指向一个string数组,称为“参数向量”。 它是函数参数的一维string数组。
两者的
int main(int argc, char *argv[]); int main();
是C或C ++程序入口点的法律定义。 Stroustrup:C ++风格和技巧常见问题解答详细介绍了一些对您的主要function可能或合法的变体。