2011-03-04 71 views
8

可能重複:
What is the proper declaration of main?C++ - INT主(INT ARGC,字符** argv的)

什麼我們所說的這個main函數的參數?他們想告訴我們什麼?

int main(int argc, char** argv)

UPDATE:並且,是代碼前一行與此類似int main(int argc, char* argv[])?如果是這樣,我們怎麼能說char** argv類似於char* argv[],因爲他們看起來不像陣列的觀點?

int main()相比,它沒有任何參數?

謝謝。

回答

9

argc參數是在調用可執行文件時指定的命令行選項的數量,包括可執行文件的名稱。單個命令行選項位於argv數組中,該數組爲NULL終止(用於調用可執行文件的名稱和路徑爲argv[0])。

這兩個版本之間的區別很簡單,如果你想解析命令行參數或不 - 如果你不感興趣,那麼你可以使用第二種形式忽略它們。

4

Wikipedia提供了一個很好的解釋。第一個參數給出了命令行參數的數量,第二個參數給出了實際的參數。

2

argc給出了參數的個數,argv給出了這些參數。第一個是通向用於運行程序的.exe,以下的有參數提供的命令行上這樣您的.exe的來電:

my.exe arg1 arg2 

int main() {} 

只是忽略了論據。

2

argv是一個數組,它包含傳遞給應用程序的命令行參數。 argc告訴你該數組中包含的元素的數量。

3

它們表示命令行參數。

argc是命令行參數的數量,包括可執行文件的名稱。 argv是一個以空字符結尾的字符串數組,其中argv[0]是命令行參數,argv[i]是之後的第i個參數,argv[argc-1]是最後一個,而argv[argc]實際上已被良好定義並且是空指針。

因此:

foo bar baz

在命令行上

將具有argc = 3,argv[0] = 「foo」 的argv[1] = 「欄」 argv[2] = 「巴茲」 argv[3] = NULL

注意,有對於「國旗」論點沒有特別的附件。

grep -i foo bar.cpp bar.h

將具有4個參數(的argc = 5包括grep本身),-i是其中之一,這將適用即使下一個參數是一個「值」附連到該標誌。

注意,如果你做了一個通配符

grep -i foo *

在UNIX最少,*將被調用到的grep,因此每個文件匹配的將是一個參數之前擴大。

順便

char** argvchar* argv[]

做同樣的事情。

此外,雖然標準說你必須使用這些簽名之一(你甚至不應該添加任何常量),沒有法則你必須使用這兩個變量名,但它是如此的傳統,現在他們很漂亮非常普遍。 (即如果你願意,你可以使用argCountargValues)。

+1

我想你的意思是'argc = 3'而不是'argc = 2'。 – trojanfoe 2011-03-04 09:50:45

+0

是的,更正 – CashCow 2011-03-04 10:15:23

+0

不客氣。 – trojanfoe 2011-03-04 22:28:49