Simple command line parsing
Since this is a single-translation-unit program, mark your panic and help as static.
About this:
(whoami = strrchr(progName, '/')) ? ++whoami : (whoami = progName);

&quot;Yikes&quot;. Generously we call this write-only code. Unroll it to
char *whoami = strrchr(progName, '/');
if (whoami)
    whoami++;
else
    whoami = progName;

In this loop, your i declaration should be moved down:
for(unsigned int arg = 1, i = 0; arg &lt; argc; ++arg){
    for(i = 0; i &lt; (unsigned int)__NUM_OF_ELEMENTS(args); ++i){

should be
for (unsigned int arg = 1; arg &lt; argc; ++arg) {
    for (int i = 0; i &lt; (unsigned int)__NUM_OF_ELEMENTS(args); ++i) {

to narrow its scope.
Don't use goto. Factor out a function where the double loop termination is done using a return.