2013-05-31 74 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