В C++11 существует два стандартизированных вида точки входа main, в первом из них в качестве аргументов передается `int argc` (количество аргументов) и `char* argv[]` (массив указателей на аргументы в памяти), есть и платформозависимые способы получить эти данные. Опции можно легко прочитать в цикле for, пробежав от 0 до `argc-1` по `argv`.
Для большей надежности и экономии времени можно научиться работать с одной из популярных библиотек для разбора (parsing) сложной командной строки на параметры и значения. Например в ней можно задавать значения параметров в нестандартном порядке (используя имена опций=значения). Для этого нужно "определить" поддерживаемые опции и затем передать в парсер те самые argc и argv.
Для C++, самый простой путь в использовании Boost::program_options, особенно если ваш проект использует Boost, хоть на первый взгляд это может показаться муторным. Примеры кода и использования этого решения есть в официальной документации. Плюсы этого варианта в возможности автоматического определения вывода команды "help" согласно определенным в коде опциям, поддержка Unicode а так же понятный код. Минусы: большой оверхед самого буста.
Примеры boost командной строки есть мане, но еще надо отметить что поддерживаются собственные реализации парсера опции, например вот так
Другой вариант, который для меня более предпочтителен - это использование GFlags, он так же работает с environment variables помимо самой командной строки. По ссылке информации будет предостаточно. К минусам этой библиотеки можно отнести использование макросов (что всегда путает джуниоров) и построение через CMake по той же причине.
Но самое полезное это инструменты из GNU libc (хотя их можно скачать и использовать и на других компиляторах). Для этого вам предлагаются Getopt и Argparse, см. gnu.org
Три варианта позволяют работать с Unix-like командной строкой. Некоторые программисты, однако, фанатеют от старинного стиля Windows, каким, например, обладает CMD .exe. Тут проще, можно самому уложиться в 100 строк собственного парсера (если не 20).
Если советовать джуниору или студенту, я бы посоветовал (из перечисленных вариантов) использовать упомянутые Сишные библиотеки GNU. Если хочется именно pure-cpp, подключить boost к своему проекту, хоть это и неоптимальное решение ради такой мелочи. И лишь потом советую gflags. В конце концов, если аргументов реально много, целесобразнее использовать файл конфигурации в своей программе.
Я надеюсь я наглядно продемонстрировал, как на TheQuestion срочно нужен "markup"