函数可以访问传递给 main() 的参数吗?

Can a function access args passed to main()?

有没有一种方法可以在 main() 之外访问程序的参数而不存储对它们的引用?

程序参数存储在程序的保留 space 中,因此我认为没有理由无法访问它们。也许有类似 const char** get_program_arguments()int get_program_arguments_count() 的东西,但我找不到它...

我的问题来自于我正在重写一个现在在公司内部的许多程序中使用的库,我需要在不更改它们的情况下访问这些程序的公共参数。例如,我需要程序名,但我不能使用 ::getenv("_"),因为它们可以从各种 shell 中执行。我不能使用 GNU 扩展,因为这需要使用 gcc、CC 等在 Linux、AIX、SunOS 上工作。

有些系统确实提供了对参数列表的访问,或者至少在选项处理期间 argv[0]. But it’s common practice for main to mutate argcargv,因此对于什么是全局变量没有可靠的正确答案他们的界面应该 return.

再加上全局状态的普遍不受欢迎,以及让任何低级函数试图分析他们可能一无所知的程序的参数都会损害调试的事实,你最终会得到 不要那样做。将参数(或者,更好的是,解码后产生的有意义的标志)传递给库并不难。