Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Willem <willem@toad.stack.nl> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: To use Perl like conditional assignment in C |
| Date | 2011-09-24 11:13 +0000 |
| Organization | Eindhoven University of Technology |
| Message-ID | <slrnj7rerd.2vmr.willem@toad.stack.nl> (permalink) |
| References | <a2b7378d-3156-4f3c-ad6a-1bf14330d993@5g2000yqo.googlegroups.com> |
Ya Shou wrote:
) Hello,
)
)
) I want to assign an uncertain value to a variable, this variable with
) values in the configuration file, reads the configuration file
) through a function to return to the read configuration value, if not
) configured or the value of non-compliance, will return 0 for failure,
) when this, I will to give it a default value assigned.
)
) However, I found it seem impossible to achieve this in C, but much
) easier to implement in Perl, see below:
)
) cfgval = loadConfig () || DEFAULT_VAL;
)
) In C '||' operator does not return the value of the expression which
) is true, but returns 1 or 0, so that I can not be used in a similar
) way. I considered a program in C is:
)
) cfgval = loadConfig ()? loadConfig (): DEFAULT_VAL;
)
) And however, this approach to involve a duplication of code, it is
) ugly, the other will call loadConfig function twice, inefficient and
) likely to cause unnecessary accidents.
)
) Of course, if / else statement can achieve this functionality, but
) this method requires an additional variable, and not look simple. As
) follows:
)
) int loadval = loadConfig ();
) if (loadval! = 0) {
) cfgval = loadval;
) } else {
) cfgval = DEFAULT_VAL;
) }
)
) Or
)
) int loadval;
) cfgval = (loadval! = 0)? loadval: DEFAULT_VAL;
)
)
) I would like to ask you is, in this case, there is nothing more
) beautiful realization?
Why can't you assign to cfgval twice?
if (!(cfgval = loadConfig()))
cfgval = DEFAULT_VAL;
Or if you want to mimic the Perl style:
(cfgval = loadConfig()) || (cfgval = DEFAULT_VAL);
But that will be deemed very ugly by most C programmers.
IIRC, some compilers have an extension which allows this:
cfgval = loadConfig() ?: DEFAULT_VAL;
But that is not standard C, as far as I know.
SaSW, Willem
--
Disclaimer: I am in no way responsible for any of the statements
made in the above text. For all I know I might be
drugged or something..
No I'm not paranoid. You all think I'm paranoid, don't you !
#EOT
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
To use Perl like conditional assignment in C Ya Shou <shouyatf@gmail.com> - 2011-09-24 04:06 -0700
Re: To use Perl like conditional assignment in C Willem <willem@toad.stack.nl> - 2011-09-24 11:13 +0000
Re: To use Perl like conditional assignment in C pete <pfiland@mindspring.com> - 2011-09-24 07:48 -0400
Re: To use Perl like conditional assignment in C Uno <merrilljensen@q.com> - 2011-09-24 21:58 -0700
Re: To use Perl like conditional assignment in C pete <pfiland@mindspring.com> - 2011-09-25 08:44 -0400
Re: To use Perl like conditional assignment in C Uno <merrilljensen@q.com> - 2011-09-26 21:52 -0700
Re: To use Perl like conditional assignment in C pete <pfiland@mindspring.com> - 2011-09-27 21:14 -0400
Re: To use Perl like conditional assignment in C Keith Thompson <kst-u@mib.org> - 2011-09-27 19:56 -0700
Re: To use Perl like conditional assignment in C Nick Keighley <nick_keighley_nospam@hotmail.com> - 2011-09-25 06:53 -0700
Re: To use Perl like conditional assignment in C "J. J. Farrell" <jjf@bcs.org.uk> - 2011-09-26 04:40 +0100
Re: To use Perl like conditional assignment in C Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-09-24 09:04 -0400
Re: To use Perl like conditional assignment in C Willem <willem@toad.stack.nl> - 2011-09-24 14:06 +0000
Re: To use Perl like conditional assignment in C Ya Shou <shouyatf@gmail.com> - 2011-09-26 21:10 -0700
Re: To use Perl like conditional assignment in C Jorgen Grahn <grahn+nntp@snipabacken.se> - 2011-09-29 22:08 +0000
Re: To use Perl like conditional assignment in C "BartC" <bc@freeuk.com> - 2011-09-26 01:37 +0100
csiph-web