Path: csiph.com!x330-a1.tempe.blueboxinc.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!border3.nntp.dca.giganews.com!Xl.tags.giganews.com!border1.nntp.dca.giganews.com!nntp.giganews.com!local2.nntp.dca.giganews.com!nntp.earthlink.com!news.earthlink.com.POSTED!not-for-mail NNTP-Posting-Date: Sat, 24 Sep 2011 06:48:56 -0500 Message-ID: <4E7DC3AA.427D@mindspring.com> Date: Sat, 24 Sep 2011 07:48:58 -0400 From: pete Reply-To: pfiland@mindspring.com Organization: PF X-Mailer: Mozilla 3.04Gold (WinNT; I) MIME-Version: 1.0 Newsgroups: comp.lang.c Subject: Re: To use Perl like conditional assignment in C References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 51 X-Usenet-Provider: http://www.giganews.com NNTP-Posting-Host: 4.154.217.85 X-Trace: sv3-CdnADHJs52vm0dpCJK3xCUztPwScEclEEWmIcN2MaujpwBFz5r7+/oLxGWivizpzxIqPGZdFWo07f6F!EqRmbwwDlJzzNYL02qJST3FpqVIZbm9a/zPlKA1NEacTt74d7GXnzwA2i7q1ORuN4xFSlrT+kuKV!wU9tYjWEKQ== X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly X-Postfilter: 1.3.40 X-Original-Bytes: 2611 Xref: x330-a1.tempe.blueboxinc.net comp.lang.c:10848 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? cfgval = loadConfig (); if (cfgval == 0) { cfgval = DEFAULT_VAL; } -- pete