线将执行以下操作,以便:
- 测试是否
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
...将把5 argc
,并argv
将包含五个字符串my_program
, -i
,input.txt
,-o
,output.log
。
因此,您引用if-test首先检查除了可执行文件名(argc == 2
)之外是否只有一个命令行参数。然后,它前进到使用该参数(cvLoadImage(argv[1], 1)
)
argc
检查,然后使用argv[n]
是一种常见的习惯用法,因为它是unsafe访问超出argv
数组的末尾。
值得指出的是,第2点中的“如果是”意味着'&&'操作符短路的事实,即,如果'argc == 2'为假,则评估将停止。 – unwind
好点;编辑。 – Chowlett
谢谢,这有帮助。它让我感到困惑,因为我以前从未见过这样的事情。所以我的下一个问题是 - 为什么要使用这样的语法? – Moirae