Как побороть warnings?
19/20. Полю int* argkeys::shortName вы присваиваете строковый литерал, то есть const char*.
26/27. 4-му полю int option::val вы присваиваете argkeys::shortName то есть int*.
25. Переменная не задействована.
30. Функция ничего не возвращает.
Си, как нормальный кроссплатформенный ассемблер, такие присваивания с вопиющим несоответствием типов терпит, но поскольку это часто признаки ошибки в программе, выводит предупреждение.
Что могу предположить? В структуре int* shortName заменил бы на int id или char id, и присвоил бы ему символьный литерал (то есть 'h'). Это автоматически решит и второе предупреждение (как только заменим там shortName на id).
А 25 и 30 — сначала допишите программу до конца.
В общем я нашел проблему КМК )) Если заменить двойные кавычки на одинарные, то тип int будет работать:...
struct argkeys {
    const char *name;
    int shortname;
    char *helpstr;
    char *manstr;
    char *description;
};
extern const struct argkeys ArgKeys[];

const struct argkeys ArgKeys[] = {
    {"help", 'h', "-h, --help", "-h[--help]", "description"},
    {"version", 'v', "-v, --version", "-v[--version]", "description"}
};
...
Уважаемый Mercury13 , вы совершенно правы. По первым двум пунктам, что вы подметили, я как только не пытался писать. А потом заменил кавычки и о чудо )) Можете объяснить почему так? Или как запрос составить, чтоб почитать?