2011-03-04 65 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