关于argc(不知道它是什么意思)
这是一个相当简单的问题,但我不能放过它。 我最近又开始使用C语言(不是非常有经验的开始),所以我可以更好地理解底层的情况。 我当然知道,argc和argv在传递给main()时分别表示参数计数和参数向量。 我试图弄清楚的是编译器知道如何将int argc解释为从命令行传递的参数数量。 如果我编写一个试图模仿main的简单函数(即int testfunc(int argc,char * argv []))并传递一个字符串,编译器会抱怨:“Expected'int',但参数的类型为char *”如我所料。 当命令行参数传递给main()时,这是如何解释不同的?
在常见的C实现中, main
不是在进程启动时调用的第一个例程。 通常,它是一些特殊的入口点,比如_crt0
,当你链接到你的程序时,C库就会提供它。 此特殊入口点处的代码检查传递给它的命令行信息(某种方式在C之外,特别是操作系统),并构造main
的参数列表。 之后和其他工作,它称为main
。
您不会自己传递argc
值(例如,从命令行),它是由您的环境(运行时)提供的,就像argc
的确切内容一样[请注意以下内容]
详细阐述, C11
,第5.1.2.2.1章(指标矿)
argc
的值应该是非负的。
argv[argc]
应该是一个空指针。
如果argc
的值大于零,则包含argv[0]
至argv[argc-1]
的数组成员应包含指向字符串的指针,这些字符串在程序启动之前由主机环境给定实现定义的值。 其目的是向程序提供在程序启动之前从托管环境中的其他地方确定的信息。 [Note start]如果主机环境不能提供字母大小写的字符串,则实现应确保字符串以小写形式接收[注意]