Anyone who designs command-line interfaces for GNU&#x2F;Linux should read this: <a href="https:&#x2F;&#x2F;www.gnu.org&#x2F;prep&#x2F;standards&#x2F;html_node&#x2F;Command_002dLine-Interfaces.html" rel="nofollow">https:&#x2F;&#x2F;www.gnu.org&#x2F;prep&#x2F;standards&#x2F;html_node&#x2F;Command_002dLin...</a> and this: <a href="https:&#x2F;&#x2F;www.gnu.org&#x2F;prep&#x2F;standards&#x2F;html_node&#x2F;Option-Table.html" rel="nofollow">https:&#x2F;&#x2F;www.gnu.org&#x2F;prep&#x2F;standards&#x2F;html_node&#x2F;Option-Table.ht...</a><p>If you are using C++, Boost.Program Options is a solid choice.  It is one of the relatively few command line argument parsers in the world which supports close to a full set of (GNU-like) behaviors without custom workarounds.  It also enables type safety in the sense of disallowing decimals where integers were expected.