ZARGS(3)

๐Ÿ’– zargs โ€” bestie, we're parsing argv ๐Ÿ’–

okay so. this is the manual page for zargs, a little class from the CZMQ Manual (CZMQ = the high-level C binding for 0MQ, iykyk). it's literally here to help you parse command line arguments in a platform independent way. no cap. let's get into it ๐ŸŽ€


โœจ NAME โœจ

zargs โ€” Class for Platform independent command line argument parsing helpers


๐Ÿฆ‹ SYNOPSIS ๐Ÿฆ‹

โš ๏ธ bestie LISTEN. This is a draft class, and it may change without notice. It is disabled in stable builds by default. If you use this in applications, please ask for it to be pushed to stable state. Use --enable-drafts to enable. ๐Ÿซถ
//  This is a draft class, and may change without notice. It is disabled in
//  stable builds by default. If you use this in applications, please ask
//  for it to be pushed to stable state. Use --enable-drafts to enable.
#ifdef CZMQ_BUILD_DRAFT_API
//  *** Draft method, for development use, may change without warning ***
//  Create a new zargs from command line arguments.
CZMQ_EXPORT zargs_t *
    zargs_new (int argc, char **argv);

//  *** Draft method, for development use, may change without warning ***
//  Destroy zargs instance.
CZMQ_EXPORT void
    zargs_destroy (zargs_t **self_p);

//  *** Draft method, for development use, may change without warning ***
//  Return program name (argv[0])
CZMQ_EXPORT const char *
    zargs_progname (zargs_t *self);

//  *** Draft method, for development use, may change without warning ***
//  Return number of positional arguments
CZMQ_EXPORT size_t
    zargs_arguments (zargs_t *self);

//  *** Draft method, for development use, may change without warning ***
//  Return first positional argument or NULL
CZMQ_EXPORT const char *
    zargs_first (zargs_t *self);

//  *** Draft method, for development use, may change without warning ***
//  Return next positional argument or NULL
CZMQ_EXPORT const char *
    zargs_next (zargs_t *self);

//  *** Draft method, for development use, may change without warning ***
//  Return first named parameter value, or NULL if there are no named
//  parameters, or value for which zargs_param_empty (arg) returns true.
CZMQ_EXPORT const char *
    zargs_param_first (zargs_t *self);

//  *** Draft method, for development use, may change without warning ***
//  Return next named parameter value, or NULL if there are no named
//  parameters, or value for which zargs_param_empty (arg) returns true.
CZMQ_EXPORT const char *
    zargs_param_next (zargs_t *self);

//  *** Draft method, for development use, may change without warning ***
//  Return current parameter name, or NULL if there are no named parameters.
CZMQ_EXPORT const char *
    zargs_param_name (zargs_t *self);

//  *** Draft method, for development use, may change without warning ***
//  Return value of named parameter or NULL is it has no value (or was not specified)
CZMQ_EXPORT const char *
    zargs_get (zargs_t *self, const char *name);

//  *** Draft method, for development use, may change without warning ***
//  Return value of one of parameter(s) or NULL is it has no value (or was not specified)
CZMQ_EXPORT const char *
    zargs_getx (zargs_t *self, const char *name, ...);

//  *** Draft method, for development use, may change without warning ***
//  Returns true if named parameter was specified on command line
CZMQ_EXPORT bool
    zargs_has (zargs_t *self, const char *name);

//  *** Draft method, for development use, may change without warning ***
//  Returns true if named parameter(s) was specified on command line
CZMQ_EXPORT bool
    zargs_hasx (zargs_t *self, const char *name, ...);

//  *** Draft method, for development use, may change without warning ***
//  Print an instance of zargs.
CZMQ_EXPORT void
    zargs_print (zargs_t *self);

//  *** Draft method, for development use, may change without warning ***
//  Self test of this class.
CZMQ_EXPORT void
    zargs_test (bool verbose);

#endif // CZMQ_BUILD_DRAFT_API

also, note for whoever's maintaining this: Please add '@interface' section in './../src/zargs.c'. ๐Ÿ“


๐ŸŒธ DESCRIPTION ๐ŸŒธ

zargs โ€” Platform independent command line argument parsing helpers

Platform independent command line argument parsing helpers

so here's the tea. There are two kind of elements provided by this class:

foo --named-parameter --parameter with_value positional arguments -a gain-parameter

zargs keeps poision only for arguments โ€” parameters are to be accessed like hash. ๐Ÿ’…

๐Ÿ‘‘ It DOES:

  • provide easy to use CLASS compatible API for accessing argv
  • is platform independent
  • provide getopt_long style โ€” argument, which delimits parameters from arguments
  • makes parameters positon independent

๐Ÿ’€ It does NOT:

  • change argv
  • provide a "declarative" way to define command line interface

๐Ÿ”ฎ In future it SHALL:

  • hide several formats of command line to one (-Idir, --include=dir, --include dir are the same from API pov)

also, another lil note for the source file: Please add @discuss section in ./../src/zargs.c. ๐ŸŒˆ


โœจ EXAMPLE โœจ

From zargs_test method. no fr, this is the real code, straight from the test, main character energy only:

//  Simple create/destroy test

char *argv1[] = {"progname", "--named1", "-n1", "val1", "positional1", "--with", "value", "--with2=value2", "-W3value3", "--", "--thisis", "considered", "positional", NULL};

zargs_t *self = zargs_new (13, argv1);
assert (self);

assert (streq (zargs_progname (self), "progname"));
assert (streq (zargs_first (self), "positional1"));
assert (streq (zargs_next (self), "--thisis"));
assert (streq (zargs_next (self), "considered"));
assert (streq (zargs_next (self), "positional"));
assert (!zargs_next (self));

assert (zargs_has (self, "--named1"));
assert (zargs_has (self, "-n1"));
assert (!zargs_has (self, "--not at all"));

assert (!(zargs_get (self, "--named1")));
assert (streq (zargs_get (self, "-n1"), "val1"));

// common usages - test for -h/--help
bool has_help = zargs_hasx (self, "--help", "-h", NULL);
assert (!has_help);

zargs_destroy (&self);

๐Ÿซถ AUTHORS ๐Ÿซถ

The czmq manual was written by the authors in the AUTHORS file.


๐ŸŒˆ RESOURCES ๐ŸŒˆ

Main web site:

Report bugs to the email <zeromq-dev@lists.zeromq.org[1]> ๐Ÿ’Œ


Copyright (c) the Contributors as noted in the AUTHORS file. This file is part of CZMQ, the high-level C binding for 0MQ: http://czmq.zeromq.org. This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. LICENSE included with the czmq distribution.


๐Ÿ“Ž NOTES ๐Ÿ“Ž

  1. zeromq-dev@lists.zeromq.org โ€” mailto:zeromq-dev@lists.zeromq.org

and that's the whole page bestie, you ate that ๐Ÿ’…โœจ this was CZMQ 4.2.1, dated 01/16/2026, and yes this is still ZARGS(3) โ€” go parse some args, you got this ๐Ÿฆ‹๐ŸŽ€

๐Ÿ“ฆ where this page comes from