Строка выполняет следующие действия по порядку:
- Проверяет, есть ли
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 сначала проверяет, был ли в командной строке ровно 1 аргумент, кроме имени исполняемого файла (argc == 2
). Затем он использует этот аргумент (cvLoadImage(argv[1], 1)
)
Проверка argc
, а затем использование argv[n]
- распространенная идиома, потому что небезопасно получить доступ за пределами массив argv
.
person
Chowlett
schedule
31.05.2013