这是一个相当简单的问题,但我不能放过它 . 我最近又开始和C一起工作(开始时并没有非常有经验)所以我可以更好地理解幕后发生了什么 . 我当然知道argc和argv,当传递给main()时,分别代表参数count和参数vector . 我想弄清楚的是编译器如何知道将int argc解释为从命令行传递的参数数量 . 如果我编写一个试图模仿main的简单函数(即int testfunc(int argc,char * argv []))并传入一个字符串,编译器会抱怨“Expected'int'但参数类型为char *”正如我所料 . 当命令行参数传递给main()时,这有何不同的解释?
2 回答
在常见的C实现中,
main
不是进程启动时调用的第一个例程 . 通常,它是一些特殊的入口点,如_crt0
,它是在链接它时由程序内置的C库提供的 . 此特殊入口点的代码检查传递给它的命令行信息(以某种方式在C之外,特别是操作系统)并构造main
的参数列表 . 在那之后和其他工作,它调用main
.您不会自己传递
argc
值(例如,从命令行传递),它由您的环境(运行时)提供,就像argc
的确切内容一样 . [注意如下]详细说明,
C11
,章节§5.1.2.2.1,(指标雷)