Command line parsing is not consistent across krb5 programs. Some use getopt() or getopt_long(), and others roll their own argument parsing. This results in surprising behavior for some users, including some error cases that can be difficult to diagnose.
Use getopt() or getopt_long() as appropriate in all krb5 programs. Some programs such as kadmin have unusual command line syntax, e.g., "modprinc +requires_preauth". We can try to preserve that syntax at the cost of some code complexity, or we can replace it with more standard syntax.
Also investigate whether we can assume the existence of getopt_long() (or at least assume that we can provide a usable substitute if the OS provides no implementation of getopt_long().