函数是否可以访问传递给main()的参数

Can a function access args passed to main()?

本文关键字:main 参数 是否 访问 函数      更新时间:2023-10-16

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

程序参数存储在程序的保留空间中,所以我认为没有理由不能访问它们。也许有类似const char** get_program_arguments()int get_program_arguments_count()的东西,但我找不到…

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

某些系统确实提供了对参数列表的访问,或者至少提供了对argv[0]的访问。但main在选项处理过程中突变argcargv是常见的做法,因此对于它们应该返回什么全局接口,没有可靠的正确答案。

再加上全局状态的普遍不受欢迎,以及让任何底层函数尝试分析程序的参数都会损害调试的事实,这些函数可能对程序一无所知,最终会导致不要这样做。将参数(或者,更好的是,解码后产生的有意义的标志(传递到库并不困难。