关于 argc(不知道它是啥意思)
Posted
技术标签:
【中文标题】关于 argc(不知道它是啥意思)【英文标题】:in regard to argc (not wondering what it means)关于 argc(不知道它是什么意思) 【发布时间】:2018-05-12 02:56:20 【问题描述】:这是一个相当简单的问题,但我不能放过它。我最近再次开始使用 C (一开始对它的经验并不丰富),所以我可以更好地理解引擎盖下发生了什么。我当然知道 argc 和 argv 在传递给 main() 时分别代表参数计数和参数向量。我想弄清楚的是编译器如何知道将 int argc 解释为从命令行传递的参数的数量。如果我编写一个尝试模仿 main 的简单函数(即 int testfunc(int argc, char* argv[])),并传入一个字符串,编译器会抱怨,“预期为 'int',但参数是 char* 类型”正如我所料。将命令行参数传递给 main() 时如何解释?
【问题讨论】:
命令行不是作为字符串传入的,幕后有很多神奇的事情发生 C 运行时启动代码获取参数字符串(来自操作系统,以操作系统特定的方式),将其拆分为多个片段,并调用main
传递这些片段。或者在某些情况下(Unix-y 系统)操作系统(更准确地说是 shell)解析字符串并将其分段传递给 C 运行时。
相关:daviddeley.com/autohotkey/parameters/parameters.htm
【参考方案1】:
在常见的 C 实现中,main
不是进程启动时调用的第一个例程。通常,它是一些特殊的入口点,如_start
,它是由程序中内置的 C 库在链接时提供的。这个特殊入口点的代码检查传递给它的命令行信息(以某种 C 语言之外的方式,特定于操作系统)并为main
构造一个参数列表。在此和其他工作之后,它调用main
。
【讨论】:
谢谢,这是我想知道的。【参考方案2】:您不会自己传递 argc
值(例如,从命令行),它是由您的环境(运行时)提供的,就像 @987654322 的 exact 内容一样@.[下面的注释]
详细说明,C11
,第 §5.1.2.2.1 章,(指标我的)
argc
的值应为非负数。
argv[argc]
应为空指针。如果
argc
的值大于零,则数组成员argv[0]
通过argv[argc-1]
inclusive 应包含指向字符串的指针,这些指针是给定的 在程序启动之前由主机环境实现定义的值。这 目的是向程序提供在程序启动之前确定的信息 来自托管环境中的其他地方。 [Note start]如果宿主环境不能 提供带有大写和小写字母的字符串,实现 应确保以小写形式接收字符串。[Note end]
【讨论】:
以上是关于关于 argc(不知道它是啥意思)的主要内容,如果未能解决你的问题,请参考以下文章