关于 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(不知道它是啥意思)的主要内容,如果未能解决你的问题,请参考以下文章

$#、$1 和 $2 是啥意思? [复制]

main是啥意思

# 在柏树中,它是啥意思

密码学中的唐娜是啥意思?

0X 是啥意思? [复制]

请问:PQ是啥意思