Я тоже не слишком люблю getopt (хотя он довольно стандартный). Одним из решений, которое я сделал, является функция argopt (). Он совместим с C, может использоваться для проверки, установлены ли флаги, а также для чтения параметров со значениями. Он поддерживает только короткие опции (например, -h), хотя написание аналогичной функции для длинных опций (например, --help) не должно быть слишком сложным. Смотрите пример:
int main(int argc, char **argv){
if(argopt(argc, argv, 'p')) printf("-p is set\n");
if(argopt(argc, argv, 'q')) printf("-q is set\n");
const char *f = argopt(argc, argv, 'f');
if(f) printf("-f is %s\n",f);
return 0;
}
Пример из командной строки:
$./main -f input.txt -rq
-q is set
-f is input.txt
Отказ от ответственности: я сделал эту функцию для развлечения, намереваясь сделать ее короткой, C-совместимой, простой в использовании и не имеющей зависимостей. Вот оно:
const char* argopt(int argc, const char *const *argv, char key){
for(int i=1; i<argc; i++){
const char *c = argv[i];
if(*c!='-') continue;
while(*++c) if(*c==key) return argv[(i+1)%argc];
}
return 0;
}