線將執行以下操作,以便:
- 測試是否
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