首页 文章

关于argc(不知道这是什么意思)

提问于
浏览
3

这是一个相当简单的问题,但我不能放过它 . 我最近又开始和C一起工作(开始时并没有非常有经验)所以我可以更好地理解幕后发生了什么 . 我当然知道argc和argv,当传递给main()时,分别代表参数count和参数vector . 我想弄清楚的是编译器如何知道将int argc解释为从命令行传递的参数数量 . 如果我编写一个试图模仿main的简单函数(即int testfunc(int argc,char * argv []))并传入一个字符串,编译器会抱怨“Expected'int'但参数类型为char *”正如我所料 . 当命令行参数传递给main()时,这有何不同的解释?

2 回答

  • 3

    在常见的C实现中, main 不是进程启动时调用的第一个例程 . 通常,它是一些特殊的入口点,如 _crt0 ,它是在链接它时由程序内置的C库提供的 . 此特殊入口点的代码检查传递给它的命令行信息(以某种方式在C之外,特别是操作系统)并构造 main 的参数列表 . 在那之后和其他工作,它调用 main .

  • 4

    您不会自己传递 argc 值(例如,从命令行传递),它由您的环境(运行时)提供,就像 argc 的确切内容一样 . [注意如下]

    详细说明, C11 ,章节§5.1.2.2.1,(指标雷)

    argc的值应为非负值 . argv [argc]应为空指针 . 如果argc的值大于零,则数组成员argv [0]到argv [argc-1]包含指向字符串的指针,在程序启动之前由主机环境给出实现定义的值 . 目的是在程序启动之前从托管环境中的其他地方向程序提供信息 . [注意开始]如果主机环境不能提供大写和小写字母的字符串,则实现应确保以小写形式接收字符串 . [注意结束]

相关问题