линия делает следующий порядок:
- Тесты если
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]
является общей идиомой, потому что это unsafe для доступа за пределами конца argv
массива.
Стоит отметить, что «если это» в пункте 2 относится к тому факту, что оператор '&&' является короткозамкнутым, т. Е. Оценка остановится, если 'argc == 2' является ложным. – unwind
Хорошая точка; изм. – Chowlett
Спасибо, что помогло. Меня это смутило, потому что я никогда раньше этого не видел. Итак, мой следующий вопрос: зачем использовать синтаксис? – Moirae