我正在查看一些 OpenCV 教程,并在开头找到了这一行(这是链接,代码位于 CalcHist 部分http://opencv.willowgarage.com/documentation/c/histograms.html下)
if (argc == 2 && (src = cvLoadImage(argv[1], 1)) != 0)
我以前从未见过这个,真的不明白。我检查了一些关于这个主题的问答,但仍然不明白。有人可以向我解释这条线的含义是什么吗?
谢谢!
我正在查看一些 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
并且是C 中函数argv
采用的两个参数的名称(几乎总是) 。是一个整数,并且等于调用可执行文件时存在的命令行参数的数量。是一个数组(表示以 NULL 结尾的字符串数组),包含这些命令行参数的实际值。从逻辑上讲,它包含条目。main
argc
argv
char*
argc
请注意,argc
并且argv
始终将可执行文件的名称作为第一个条目,因此以下命令调用:
$> my_program -i input.txt -o output.log
...将 5 放入argc
,argv
并将包含五个字符串my_program
, -i
, input.txt
, -o
, output.log
。
argc == 2
因此,您引用的 if-test 首先检查除了可执行文件名称 ( )之外是否正好有 1 个命令行参数。然后它继续使用该参数 ( cvLoadImage(argv[1], 1)
)
检查argc
然后使用argv[n]
是一种常见的习惯用法,因为超出数组末尾的访问是不安全的。argv