Parser callback generation and built-in parser helpers.
- Built-in parser wrappers
- ARG_PARSE_L, ARG_PARSE_LL, ARG_PARSE_UL, ARG_PARSE_ULL, ARG_PARSE_F, and ARG_PARSE_D are convenience wrappers around ARG_PARSER.
- Custom parser contract
- Custom parser callbacks return ARG_INVALID or ARG_VALID and use signature
(const char *str, void *dest).
|
|
#define | ARG_PARSE_L(name, base, dest_t, CAST, cond, err) |
| | Convenience wrapper of ARG_PARSER using strtol.
|
|
#define | ARG_PARSE_LL(name, base, dest_t, CAST, cond, err) |
| | Convenience wrapper of ARG_PARSER using strtoll.
|
|
#define | ARG_PARSE_UL(name, base, dest_t, CAST, cond, err) |
| | Convenience wrapper of ARG_PARSER using strtoul.
|
|
#define | ARG_PARSE_ULL(name, base, dest_t, CAST, cond, err) |
| | Convenience wrapper of ARG_PARSER using strtoull.
|
|
#define | ARG_PARSE_F(name, dest_t, CAST, cond, err) |
| | Convenience wrapper of ARG_PARSER using strtof.
|
|
#define | ARG_PARSE_D(name, dest_t, CAST, cond, err) |
| | Convenience wrapper of ARG_PARSER using strtod.
|
◆ ARG_PARSER
| #define ARG_PARSER |
( |
| name, |
|
|
| strto, |
|
|
| ARG_BASE, |
|
|
| strto_t, |
|
|
| dest_t, |
|
|
| CAST, |
|
|
| cond, |
|
|
| err ) |
Generates a typed parser callback with common conversion checks.
The generated function is named parse_<name> and matches argument::parse_callback. It parses str, rejects malformed input, range errors, and custom condition failures, then writes to dest.
- Parameters
-
| name | Suffix used for generated function name. |
| strto | Conversion routine, e.g. strtol or strtod. |
| ARG_BASE | Macro, leave out macro for no base, or e.g. ARG_BASE(10) to pass to strto. |
| strto_t | Return type of strto. |
| dest_t | Destination pointee type. |
| CAST | Optional cast expression when narrowing/widening. |
| cond | Rejection predicate evaluated against local variable val. |
| err | Error text, falls back to ARG_ERR when empty. |
- Return values
-
◆ ARG_BASE
Helper for the ARG_BASE parameter in ARG_PARSER.
- Note
- If the conversion function doesn't take a base parameter, omit the macro like in the ARG_PARSE_F macro definition.
- Parameters
-
| N | Numeric base to pass to conversion functions, e.g. 10 for decimal or 16 for hex. |
◆ ARG_ERR
| #define ARG_ERR "Invalid value" |
Default parser error message if err is empty in ARG_PARSER.
◆ ARG_INVALID
| #define ARG_INVALID |
( |
| msg | ) |
|
Creates a failing arg_callback value.
- Parameters
-
| msg | Diagnostic message to show the user, e.g. "Must be a positive integer". |