help-gengetopt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [help-gengetopt] Re: Gengetopt 2.21 enhancement suggestions


From: Lorenzo Bettini
Subject: Re: [help-gengetopt] Re: Gengetopt 2.21 enhancement suggestions
Date: Thu, 18 Oct 2007 09:10:10 +0200
User-agent: Mozilla-Thunderbird 2.0.0.4 (X11/20070828)

J. David Bryan wrote:
On 17 Oct 2007 at 12:41, Lorenzo Bettini wrote:

Actually setting print_errors to 0 in the _init function causes
previous code not to work anymore in some cases, and this is quite
dangerous (e.g., some tests in the testsuite do not print error
messages anymore); thus I set print_errors to 1 also in the _init
function and changed the documentation accordingly.

I don't quite understand the intent of the "_init" function. Wouldn't it make more sense if it initialized the values to the defaults (override = 0, initialize = 1, check_required = 1), rather than to all zeros? Then:

  params = cmdline_parser_params_init();
  i = cmdline_parser_ext (..., params);

...would be the same as:

  i = cmdline_parser (...);

...and then in using "cmdline_parser_params_init", you would only have to change those items where the default behavior is not what is wanted.

But maybe I don't understand gengetopt enough yet to know why zeros are best.

on the contrary you got the point perfectly: it was my original mistake to initialize those fields to 0 instead of to their default values; indeed the equivalence above is perfectly right (and probably I'll add it to the documentation). I'm only scared that changing the _init function now might break existing code... but probably, since this feature was added in the previous version only, now it is the best time to write the _init function correctly (i.e., initialize fields with their default values). I only hope this won't break existing code (by silently changing the semantics of the function)...

probably, since also an init function accepting a pointer to an existing params structure would be useful; thus there would be

void cmdline_parser_params_init(struct params *params);
struct params *cmdline_parser_params_create();

this change of signature (and these names are more appropriate as well) would make previous code non compilable and would catch the attention of the programmer so that he can realize that something has changed.

I could also use the first function in all the generated parser functions (by avoiding current duplication of code).

what do you think?

thanks
        Lorenzo

--
Lorenzo Bettini, PhD in Computer Science, DSI, Univ. di Firenze
ICQ# lbetto, 16080134     (GNU/Linux User # 158233)
HOME: http://www.lorenzobettini.it MUSIC: http://www.purplesucker.com
http://www.myspace.com/supertrouperabba
BLOGS: http://tronprog.blogspot.com  http://longlivemusic.blogspot.com
http://www.gnu.org/software/src-highlite
http://www.gnu.org/software/gengetopt
http://www.gnu.org/software/gengen http://doublecpp.sourceforge.net




reply via email to

[Prev in Thread] Current Thread [Next in Thread]