IF Statement Notation

Anyone know how to interpret this IF (I think) statement...

PMI=(PM>=0)?((PM==0)?1000:PM):PMC

it's in a notation-style I don't understand.

Thanks! ...Jim Thompson

-- | James E.Thompson | mens | | Analog Innovations | et | | Analog/Mixed-Signal ASIC's and Discrete Systems | manus | | San Tan Valley, AZ 85142 Skype: Contacts Only | | | Voice:(480)460-2350 Fax: Available upon request | Brass Rat | | E-mail Icon at

formatting link
| 1962 | I love to cook with wine. Sometimes I even put it in the food.

Reply to
Jim Thompson
Loading thread data ...

It looks like C-style conditional operator (whose use is frowned upon, particularly in cascade like that).

In C and C++,

ANSWER = THING ? THIS : THAT;

means that if THING is true, ANSWER = THIS. Of THING is false, ANSWER = THAT.

In more traditional if-else notation, your statement expands to:

if (PM >= 0) { if (PM == 0) { PMI = 1000; } else { PMI = PM; } } else { PMI = PMC; }

Which packs much less confusion per line, and is therefor much less desirable from a geeky programmer point of view.

Those limp-wristed busybodies at MISRA have ruled out its use in mission- critical software, if you can imagine that.

--

Tim Wescott 
Wescott Design Services 
http://www.wescottdesign.com
Reply to
Tim Wescott

In English, does this mean:

If PM is exactly 0, PMI=1000 If PM is greater than 0, PMI=PM Otherwise (negative PM?) PMI=PMC

I'm confused by the stacking :-(

Thanks, Tim! C-notation fits... this is from an HSpice device library. ...Jim Thompson

--
| James E.Thompson                                 |    mens     | 
| Analog Innovations                               |     et      | 
| Analog/Mixed-Signal ASIC's and Discrete Systems  |    manus    | 
| San Tan Valley, AZ 85142   Skype: Contacts Only  |             | 
| Voice:(480)460-2350  Fax: Available upon request |  Brass Rat  | 
| E-mail Icon at http://www.analog-innovations.com |    1962     | 
              
I love to cook with wine.     Sometimes I even put it in the food.
Reply to
Jim Thompson

Oh gosh, why should something so clear be confusing? ;)

Yes, that's what it means (which is what JM said).

--

Tim Wescott 
Wescott Design Services 
http://www.wescottdesign.com
Reply to
Tim Wescott

And, a more natural way would be not to have tests for overlapping cases:

if (PM > 0) { PMI = PM; } else if (PM == 0) { PMI = 1000; } else { PMI = PMC; }

Which translates back to:

PMI = (PM > 0) ? PMI = PM : (PM == 0) ? 1000 : PMC;

Reply to
Kaz Kylheku

Although to some extent it would be more readable for a non-programmer by rewriting it in order of ascending value of PM namely

if (PM

Reply to
Martin Brown

if (PM=0) doit // which never works

is not allowed in MISRA C:2012, Rule 13.4 "The result of an assignment operator should not be used"

The Keil ARM C compiler always whinges about 'if (assignment)' with a helpful "did you really mean that" kind of warning.

Michael Kellett

Reply to
MK

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.