argc从哪里来
Where does argc come from?
本文关键字:argc 更新时间:2023-10-16
fork/exec创建了一个新进程。Exec设置了命令行参数,但我看不出它设置了要放入argc
中的这些参数的数量。
CCD_ 2应该是在新进程中运行的第一个函数,但CCD_。
它设置在哪里?它必须是某种设置代码,在调用main
之前对参数进行计数,但我所读到的任何内容都无法解释该设置代码的作用或驻留位置。
这是libc
吗?这在每个操作系统上都是一样的吗?并且有一些规范涵盖吗?除此之外,我在哪里可以找到设置代码中的内容?它是在实例化全局变量之前调用的吗?
在调用main
之前,大多数实现中都会发生很多事情(通常是由类似于crt0
(C运行时启动)的东西设置的环境)。
在main
退出后,还会发生很多事情,比如资源关闭、atexit
退出处理程序等等。
C标准只真正涵盖了语言方面发生的事情,而不是实现如何在幕后完成工作(这基本上是你所问的)。每个实现可能以不同的方式进行操作,但许多UNIX类型都有类似于前面提到的crt0
的设置。
操作系统负责处理它。毕竟,它是处理线程和进程的操作系统。
使用fork会导致在下一行代码处继续。Exec函数族会创建一个新的执行,具体取决于您使用的是哪一个。函数的第二个参数可能是参数数组。
#include <unistd.h>
int ret;
char *cmd[] = { "ls", "-l", (char *)0 };
char *env[] = { "HOME=/usr/home", "LOGNAME=home", (char *)0 };
...
ret = execve ("/bin/ls", cmd, env);
在C和C++中,main()
是从mainCRTStartup()
或依赖于构建工具的类似函数调用的。如果您中断调试器并检查调用堆栈,您应该能够找到源。
相关文章:
- 为什么 Xcode 无法识别 argc?
- 为什么argc的输出会有所不同?
- 视频捕获与" int main(int argc, char **argv) "
- "if (argc < 2 || argc > 2)"应该有 2 个参数吗?&终止在抛出'std::out_of_range'错误实例后调用
- 为什么现代C 仍然保留旧的C样式原型,用于int argc,char ** argv
- 将ARGV和ARGC传递给Main作为数组
- 带有 argc 和 argv 的素数
- 将 argc 和 argv 传递给 QApplication 到单元测试用例方法中
- 无论如何,在我的主文件之外传递 argc、argv .cpp
- Qapplication中没有成员ARGC和ARGV
- 函数main中的参数argv(int argc,char *argv [])
- C++ (int getopt(argc, (char **)argv, optstring)
- 如何从 ARGC 读取文件
- C++ 从节点模拟 int main(int argc, char *argv[])
- argc C++中的argv参数(游戏编程)
- 为什么 ARGC 返回 6 而不是 3
- argc atoi argv, Opencv, C++
- 将ARGV和ARGC传递到线程
- char *argv []和int argc c 的全局覆盖范围
- 我如何在框架中找到ARGC的地址