U_CAPI int U_EXPORT2
u_parseArgs(int argc, char* argv[], int optionCount, UOption options[]) { char *arg; int i=1, remaining=1; char c, stopOptions=0;
while(i<argc) {
arg=argv[i]; if(!stopOptions && *arg=='-' && (c=arg[1])!=0) { /* process an option */
UOption *option=nullptr;
arg+=2; if(c=='-') { /* process a long option */ if(*arg==0) { /* stop processing options after "--" */
stopOptions=1;
} else { /* search for the option string */ int j; for(j=0; j<optionCount; ++j) { if(options[j].longName && uprv_strcmp(arg, options[j].longName)==0) {
option=options+j; break;
}
} if(option==nullptr) { /* no option matches */ return -i;
}
option->doesOccur=1;
if(option->hasArg!=UOPT_NO_ARG) { /* parse the argument for the option, if any */ if(i+1<argc && !(argv[i+1][0]=='-' && argv[i+1][1]!=0)) { /* argument in the next argv[], and there is not an option in there */
option->value=argv[++i];
} elseif(option->hasArg==UOPT_REQUIRES_ARG) { /* there is no argument, but one is required: return with error */
option->doesOccur=0; return -i;
}
}
if(option->optionFn!=nullptr && option->optionFn(option->context, option)<0) { /* the option function was called and returned an error */
option->doesOccur=0; return -i;
}
}
} else { /* process one or more short options */ do { /* search for the option letter */ int j; for(j=0; j<optionCount; ++j) { if(c==options[j].shortName) {
option=options+j; break;
}
} if(option==nullptr) { /* no option matches */ return -i;
}
option->doesOccur=1;
if(option->hasArg!=UOPT_NO_ARG) { /* parse the argument for the option, if any */ if(*arg!=0) { /* argument following in the same argv[] */
option->value=arg; /* do not process the rest of this arg as option letters */ break;
} elseif(i+1<argc && !(argv[i+1][0]=='-' && argv[i+1][1]!=0)) { /* argument in the next argv[], and there is not an option in there */
option->value=argv[++i]; /* this break is redundant because we know that *arg==0 */ break;
} elseif(option->hasArg==UOPT_REQUIRES_ARG) { /* there is no argument, but one is required: return with error */
option->doesOccur=0; return -i;
}
}
if(option->optionFn!=nullptr && option->optionFn(option->context, option)<0) { /* the option function was called and returned an error */
option->doesOccur=0; return -i;
}
/* get the next option letter */
option=nullptr;
c=*arg++;
} while(c!=0);
}
/* go to next argv[] */
++i;
} else { /* move a non-option up in argv[] */
argv[remaining++]=arg;
++i;
}
} return remaining;
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.19 Sekunden
(vorverarbeitet am 2026-06-07)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.