c++ - 传递给 main() 的 argc 和 argv 值是如何设置的?

标签 c++ c

我想更好地了解启动 C 或 C++ 程序时命令行参数的幕后情况。我当然知道,argcargv 在传递给 main() 时,分别表示参数计数和参数 vector 。

我想弄清楚的是编译器如何知道将 int argc 解释为从命令行传递的参数数量。如果我编写一个简单的函数来尝试模仿 main()(例如 int testfunc(int argc, char* argv[])),并传入一个字符串,编译器提示说,“预期为‘int’,但参数的类型为 char*”,正如我所料。当命令行参数传递给 main() 时,这有何不同解释?

最佳答案

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

关于c++ - 传递给 main() 的 argc 和 argv 值是如何设置的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47535171/

相关文章:

c++ - 顺序内存分配

使用 protected 构造函数的 C++ 常量实例?

c++ - 运行时检查失败 #2 - 变量周围的堆栈已损坏 C++

c++ - 在 VSCode 上使用 F5 调试失败,提示 "Unable to establish a connection to GDB"

c - C/GCC 4.6.3 中的 union 填充值

c - 从 C 文本文件中读取值流

C++临时变量解释

c++ - 构建遗留 Turbo C++ 代码

c - 如何在不指定 -O1 的情况下获得 gcc -O1 优化

c - C 头文件和源文件的标准结构