OpenCV——argc与argv参数
背景
在看OpenCV源码时,在示例程序中经常出现argc和argv这两个参数,那么它俩的用途到底是啥呢?
argc和argv中的“arg”指的是“参数”。
其中argc为整数,用来统计运行程序时送给main()函数的命令行参数的个数。而*argv[],为字符串数组,用来存放指向字符串参数的指针数组,每一个元素指向一个参数。
argc和argv这两个参数一般在命令行编译程序时有用,在初学C++时往往要弱化argc和argv的用法,所以main函数唱常不带参数。而在opencv的官方文档中,main函数的写法常常会带上这两个形参。并且在函数体内部会使用到这两个形参,例如:
int main(int argh, char ** argv)
{
const char* imagename = argc > 1 ? argv[1] : “1.jpg”;
…
}
其实带形参的main函数例如上面的那个例子,是UNIX、Linux、MacOS等操作系统中C/C++的main函数的标准写法,也是血统最纯正的main函数的写法。可能外国的程序大牛们更喜欢使用UNIX、Linux、MacOS等操作系统,所以我们接触到的由他们开发和维护的OpenCV库的时候,会看到argc和argv的出现。
argc和argv的具体含义
这两个参数一般在命令行编译程序时有用。有些编译器已经允许将main函数的返回值设为void,这就已不再是合法的C++了,其实main(int argh, char ** argv)才是标准的写法。其中第一个参数为int类型的argc,用来统计程序运行时发给main函数的命令行参数的个数,在VS中默认值为1。第二个参数是char*类型的argv[],为字符串数组,用来存放指向的字符串参数的指针数组,每个元素指向一个参数,各成员含义如下:
argv[0]:指向程序运行的全路径名
argv[1]:指向在DOS命令中执行程序名后的第一个字符串
argv[2]:指向执行程序名后的第二个字符串
argv[3]:指向执行程序名后的第三个字符串
argh[argc]:为NULL