2013-05-31 77 views

回答

5

线将执行以下操作,以便:

  1. 测试是否argc == 2 - 也就是说,如果有正好1个命令行参数(第一“参数”是可执行文件名称)
  2. 如果是这样(因为如果argc不是2,短路&&将中止测试,而不评价右手侧),设置src到的cvLoadImage结果呼吁该命令行参数结果
  3. 测试是否(和因此src)不是零

argcargv是给予由main函数C. argc所采取的两个参数的名称(几乎总是)是一个整数,并等于的命令行参数本数可执行文件时被称为。 argvchar*的数组(表示一个以NULL结尾的字符串数组),包含这些命令行参数的实际值。从逻辑上讲,它包含argc条目。

注意argcargv总是有可执行文件的名称作为第一个条目,因此下面的命令调用:

$> 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数组的末尾。

+0

值得指出的是,第2点中的“如果是”意味着'&&'操作符短路的事实,即,如果'argc == 2'为假,则评估将停止。 – unwind

+0

好点;编辑。 – Chowlett

+0

谢谢,这有帮助。它让我感到困惑,因为我以前从未见过这样的事情。所以我的下一个问题是 - 为什么要使用这样的语法? – Moirae