int argc,char * argv 是什么意思?

在许多C ++ IDE和编译器中,当它为您生成主函数时,它看起来像这样:

int main(int argc, char *argv[])

当我编写没有IDE的C ++时,只需使用命令行编译器,我键入:

int main()

没有任何参数。 这是什么意思,对我的程序至关重要?

argvargc是如何将命令行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()); 

而你没有得到通过的参数。

还有两件事要注意:

  1. 这是主要的唯一两个标准授权签名。 如果一个特定的平台接受额外的参数或不同的返回types,那么这是一个扩展,不应该依赖于便携式程序。
  2. *argv[]**argv是完全等价的,所以你可以写int main(int argc, char *argv[])作为int main(int argc, char **argv)

主要参数代表启动时提供给程序的命令行参数。 argc参数表示命令行参数的个数,char * argv []是表示命令行上提供的各个参数的string(字符指针)的数组。

第一个参数是提供的参数数量,第二个参数是表示这些参数的string列表。

main函数可以有两个参数argcargvargc是一个整型参数,它是传递给程序的参数个数。

程序名称总是第一个参数,所以程序至less有一个参数, argc的最小值是1。 但是如果一个程序本身有两个参数,那么argc的值就是三。

参数argv指向一个string数组,称为“参数向量”。 它是函数参数的一维string数组。

两者的

 int main(int argc, char *argv[]); int main(); 

是C或C ++程序入口点的法律定义。 Stroustrup:C ++风格和技巧常见问题解答详细介绍了一些对您的主要function可能或合法的变体。