Может ли функция получить доступ к аргументам функции main ()? - PullRequest
0 голосов
/ 30 октября 2018

Есть ли способ получить доступ к аргументам программы за пределами main() без сохранения ссылок на них?

Программные аргументы хранятся в зарезервированном пространстве программы, поэтому я не вижу причин, по которым невозможно получить к ним доступ. Может быть, есть что-то вроде const char** get_program_arguments() и int get_program_arguments_count(), но я не могу найти это ...

Моя проблема связана с тем, что я переписываю библиотеку, которая сейчас используется во многих программах внутри компании, и мне нужно получить доступ к общим аргументам этих программ, не меняя их. Например, мне нужно имя программы, но я не могу использовать ::getenv("_"), поскольку они могут выполняться из различных оболочек. Я не могу использовать расширение GNU, потому что это должно работать в Linux, AIX, SunOS с использованием gcc, CC и т. Д.

1 Ответ

0 голосов
/ 30 октября 2018

Некоторые системы предоставляют доступ к списку аргументов, или, по крайней мере, argv[0]. Но это обычная практика для main до mutate argc и argv во время обработки опций, поэтому нет надежного правильного ответа относительно того, что глобальный интерфейс для них должен возвращать .

Добавьте к этому общую нежелательность глобального состояния и тот факт, что отладка наносит вред тому, что все низкоуровневые функции пытаются анализировать аргументы программы, о которой они могут ничего не знать, и в итоге вы получаете don не делай этого . Нетрудно передать аргументы (или, что лучше, значимые флаги, возникающие в результате их декодирования) в библиотеку.

...