boostorg / boostorg/program_options
Confusing behavior when order of long/short options are swapped
- Vorherrschende Sprache
- C++
- Sterne
- 136
- Forks
- 117
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Adding an option like this:
```cpp
desc.add_options()( "h,help", "Print help and exit" );
```
In a simple test program and then trying to use `--help` results in a confusing error:
```
$ ./prog --help
libc++abi.dylib: terminating with uncaught exception of type boost::exception_detail::clone_impl >: unrecognised option '--help'
```
The [documentation](https://www.boost.org/doc/libs/1_66_0/doc/html/boost/program_options/option_description.html) for `option_description::option_description(const char*, const value_semantic*)` says:
> The 'name' parameter is interpreted by the following rules:
> if there's no "," character in 'name', it specifies long name
> otherwise, the part before "," specifies long name and the part after -- short name.
However, it is easy for new users of this library to think that swapping them is OK.
The reason for this limitation isn't clear to me -- presumably, if one is "long" and the other "short", providing them in either order should be OK, and a simple test can tell which is which. In either case, the error message on misuse is needlessly cryptic and could probably be turned into an error thrown from `option_description::option_description`. This seems reasonable, since using `"h,help"` as the option name results in bad behavior regardless: the resulting executable has options `--h` and `-h`.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Beginne mit option_description::option_description(const char*, const value_semantic*) und den dokumentierten Regeln für Namensformate. Reproduziere das Verhalten im einfachen Testprogramm mit "h,help" und ermittle anschließend, ob vertauschte Namen ausdrücklich akzeptiert oder abgelehnt werden sollten. Als erledigt gilt die Aufgabe, wenn die Fehlverwendung nicht mehr zu dem verwirrenden Laufzeitverhalten führt und das erwartete Verhalten durch einen Test abgedeckt ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- cpp
- Bereich
- cli
- Issue-Typ
- Bug
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100