OpenCV argc和argv混淆
我正在检查一些OpenCV教程并在开头找到这一行(这里是链接,代码在CalcHist部分下面http://opencv.willowgarage.com/documentation/c/histograms.html )
if (argc == 2 && (src = cvLoadImage(argv[1], 1)) != 0)
我以前从未见过这个,真的不明白。 我检查了一些有关此主题的问答,但仍然不理解。 有人可以向我解释这条线的含义是什么?
谢谢!
该行按顺序执行以下操作:
- 测试
argc == 2
– 也就是说,如果只有1个命令行参数(第一个“参数”是可执行文件名) - 如果是这样(因为如果
argc
不是2,短路&&
将在不评估右侧的情况下中止测试),则将src
设置为在该命令行参数上调用的cvLoadImage
的结果 - 测试结果(因此
src
)是否不为零
argc
和argv
是由main
函数在C.中获取的两个参数的名称(几乎总是) argc
是一个整数,并且等于调用可执行文件时存在的命令行参数的数量。 argv
是一个char*
数组(表示以NULL结尾的字符串数组),包含这些命令行参数的实际值。 从逻辑上讲,它包含argc
条目。
请注意, argc
和argv
始终将可执行文件的名称作为第一个条目,因此以下命令调用:
$> my_program -i input.txt -o output.log
…将在argc
放置5,而argv
将包含五个字符串my_program
, -i
, input.txt
, -o
, output.log
。
因此,除了可执行文件名( argc == 2
)之外,引用的if-test首先检查是否只有1个命令行参数。 然后它继续使用该参数( cvLoadImage(argv[1], 1)
)
检查argc
然后使用argv[n]
是一种常见的习惯用法,因为在argv
数组的末尾访问它是不安全的 。