C ++ - int main(int argc,char ** argv)

时间:2011-03-04 09:33:41

标签: c++ arguments main

  

可能重复:
  What is the proper declaration of main?

这个main函数中的参数是什么意思?他们试图告诉我们什么?

int main(int argc, char** argv)

更新:并且,上一行代码是否类似于此int main(int argc, char* argv[])?如果是这样,我们怎么能说char** argvchar* argv[]类似,因为从数组的角度来看它们看起来并不相似?

如何与没有任何参数的int main()进行比较?

感谢。

5 个答案:

答案 0 :(得分:11)

argc参数是调用可执行文件时指定的命令行选项数,包括可执行文件名。单个命令行选项位于argv数组中,NULL终止(用于调用可执行文件的名称和路径位于argv[0])。

两个版本之间的区别仅在于您是否要解析命令行参数 - 如果您对它们不感兴趣,那么您可以使用第二种形式忽略它们。

答案 1 :(得分:4)

Wikipedia提供了一个很好的解释。第一个参数为您提供命令行参数的数量,第二个参数为您提供实际参数。

答案 2 :(得分:3)

它们代表命令行参数。

argc是命令行参数的数量,包括可执行文件的名称。 argv是一个以空字符结尾的字符串数组,其中argv[0]是命令行参数,argv[i]之后是argv[argc-1]argv[argc]是最后一个,foo bar baz实际上是很好的定义和一个NULL指针。

因此:

argc

命令行上的

argv[0] = 3,argv[1] =“foo”argv[2] =“bar”argv[3] =“baz”grep -i foo bar.cpp bar.h = NULL

请注意,“flag”参数没有特殊的附件。

grep -i foo *

将有4个参数(argc = 5包括grep本身),-i是其中之一,即使下一个参数是附加到标志的“值”,这也适用。

请注意,如果您使用了通配符

char** argv

至少在UNIX中,*会在调用grep之前展开,因此匹配的每个文件都是参数。

顺便提及

char* argv[]argCount

做同样的事情。

虽然标准说你必须使用这些签名中的一个(你甚至不应该添加任何consts),但是没有法律你必须使用这两个变量名,但它现在是如此常规,以至于它们几乎都是普遍。 (如果您愿意,可以使用argValues和{{1}}。)

答案 3 :(得分:2)

argc为您提供参数的数量,argv为您提供这些参数。第一个是用于运行程序的.exe的路径,以下是您在命令行上提供的.exe调用者的参数,如下所示:

my.exe arg1 arg2

尽管

int main() {}

忽略这些论点。

答案 4 :(得分:2)

argv是一个包含传递给应用程序的命令行参数的数组。 argc告诉你该数组中包含的元素数量。