int argc,char * argv []是什么意思?
在许多C ++ IDE和编译器中,当它为您生成主要功能时,它看起来像这样:
int main(int argc, char *argv[])
当我编写没有IDE的C ++时,只需使用命令行编译器,我键入:
int main()
没有任何参数。 这是什么意思,对我的程序至关重要?
argv
和argc
是命令行参数如何在C和C ++中传递给main()
。
argc
将是argv
指向的字符串的数量。 这将(实际上)为1加上参数的数量,因为实际上所有的实现都会在程序中加入数组名称。
按照约定,这些变量被命名为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());
而你没有得到通过的参数。
还有两点需要注意:
main
的唯一两个标准授权签名。 如果一个特定的平台接受额外的参数或不同的返回类型,那么这是一个扩展,不应该依赖于便携式程序。 *argv[]
和**argv
完全等价,因此可以将int main(int argc, char *argv[])
写成int main(int argc, char **argv)
。