Параметры командной строки доступа, не используя символ ** argv в основном

Там какой-либо путь состоит в том, чтобы получить доступ к параметрам командной строки, не используя аргумент основному? Я должен получить доступ к нему в другой функции, и я предпочел бы не передавать его в.

Мне нужно решение, которое только обязательно работает над Mac OS и Linux с GCC.

5
задан Jeffrey Aylesworth 18 March 2010 в 16:26
поделиться

4 ответа

Я не думаю, что вы должны это делать, так как среда выполнения C подготовит аргументы и передаст их в main через int argc, char **argv, не пытайтесь манипулировать поведением, взламывая его, так как это будет в основном непортируемое или, возможно, неопределенное поведение!!! Придерживайтесь правил, и у вас будет переносимость... нет другого способа сделать это, кроме как сломать его...

3
ответ дан 18 December 2019 в 09:48
поделиться

Вы можете скопировать их в глобальные переменные, если хотите.

3
ответ дан 18 December 2019 в 09:48
поделиться

Есть ли причина, по которой передача указателя на уже занятое пространство так плохо? Вы не получите никакой реальной экономии, исключив аргумент рассматриваемой функции, и вы можете запустить интересный фейерверк. Обход стека вызовов main () с помощью творческого взлома обычно заканчивается неопределенным поведением или зависимостью от поведения, специфичного для компилятора. Оба они плохи для функциональности и портативности соответственно.

Имейте в виду, что рассматриваемые аргументы - это указатели на аргументы, они будут занимать место независимо от того, что вы делаете. Удобство их индекса столь же дешево, как sizeof (int), я не вижу причин не использовать его.

Похоже, вы оптимизируете довольно агрессивно и преждевременно или застряли с необходимостью добавлять в код функции, с которыми действительно не хотите связываться. В любом случае традиционные действия сэкономят время и сэкономят силы.

0
ответ дан 18 December 2019 в 09:48
поделиться

Можно. Большинство платформ предоставляют глобальные переменные __argc и __argv. Но опять же, я поддерживаю комментарий zneak.

P.S. Используйте boost::program_options для их разбора. Пожалуйста, не делайте этого по-другому в C++.

0
ответ дан 18 December 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: