在C语言中,定义main函数时是否真的需要使用
我感觉好像有些东西我没有理解到:
int main(int argc, char *argv[])
来接收程序参数呢?换句话说,当使用int main(void)
的签名定义main函数时,是否可能仅使用POSIX接口恢复程序参数呢?我感觉好像有些东西我没有理解到:
- POSIX定义了多个接口用于检索其他进程特定信息。例如,有用于环境变量(可以说是从C99继承而来的,但还扩展了一些函数,如
unsetenv()
)和主机标识(gethostid()
)的接口。 - 特定操作系统定义了“全局”方式用于检索命令行参数。例如,Windows提供了
GetCommandLineW
和CommandLineToArgvW
函数,HP-UX提供了全局变量__argc_value
和__argv_value
。Linux有/proc/self/cmdline
,可以将其解析为argv
和argc
。
int f(void)
。如何从调用者中访问您传递给该函数的任何参数? - too honest for this sitemain
函数完成所有这些操作(可能还涉及一些启动代码),然后调用Windows应用程序入口。不过,我必须承认,我已经很久没有看过Windows代码了。 - too honest for this siteargc
和argv
。显然,启动代码必须以实现相关的方式获取它们,因为它是平台ABI的一部分。在大多数(所有?)POSIX平台上,从被execve()
执行的二进制文件中得到的第一条指令不是main()
的第一条指令。你所争论的观点,即没有其他POSIX标准的方法来查看命令行参数,似乎是正确的,但Rhymoid正确地指出它可能像环境变量一样。 - Peter Cordes