warum struct Option Array einen zusätzlichen Dummy-Eintrag muss bei der Verwendung von getopt_long
-
11-10-2019 - |
Frage
Zum Beispiel die Option Array ist:
static struct option const long_options[] =
{
{"help", no_argument, 0, 'h'},
{"version", no_argument, 0, 'v'},
{0, 0, 0, 0}
};
Ist es für padding?
Lösung
Schauen Sie sich die Manpage für getopt_long()
:
int getopt_long(int argc, char * const *argv, const char *optstring, const struct option *longopts, int *longindex);
Die argc
und argv
Paare zeigen eine Art und Weise zu sagen, wie viele Einträge es in einem Array ist (durch explizite Zählung, obwohl seit argv[argc] == 0
, gibt es auch einen Wächter dort). Die optstring
zeigt kurze Argumente; die longindex
ist ein Ausgabeparameter. Das Blatt nur der Zeiger longopts
was bedeutet, dass die Funktion der Lage sein muss, zu sagen, wie viele Einträge in dem Array ohne Unterstützung Zahl ist (kein longoptcount
Argument ist), so dass das Ende des Arrays von allen Werten gekennzeichnet ist Null - eine Sentinel Wert.
Andere Tipps
Es ist ein ‚Sentinel‘ so der Code Verarbeitung des Array weiß, wann es zu Ende gekommen ist.