public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
* Could you please explain this code segment
@ 2009-12-17  8:22 W.H. Kalpa Pathum
  2009-12-17  8:46 ` Ineiev
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: W.H. Kalpa Pathum @ 2009-12-17  8:22 UTC (permalink / raw)
  To: gcc-help

The following block of code when compiled with gcc (gcc version 4.4.2
20091027 (Red Hat 4.4.2-7) (GCC) ) resulted in the following output.
Could you please explain how the output differs (when assigned to the
variable b and in printf statement) and the way the compiler executes
each segment of the variable?

int main(){
int a = 10;
int b = (++a) + (++a);
printf("%d %d %d %d\n", b, a++, a, ++a);
printf("%d %d %d %d\n", ++a + ++a, a++, a, ++a);
return 0;
}

OUTPUT
24 13 14 14
36 15 18 18

--
W.H.Kalpa Pathum
http://kalpapathum.blogspot.com
http://thiraya.wordpress.com

^ permalink raw reply	[flat|nested] 11+ messages in thread
* Re: Could you please explain this code segment
@ 2009-12-17 20:11 Bill McEnaney
  2009-12-17 20:22 ` Brian Budge
  0 siblings, 1 reply; 11+ messages in thread
From: Bill McEnaney @ 2009-12-17 20:11 UTC (permalink / raw)
  To: Bob Plantz, Joel Dice, W.H. Kalpa Pathum, gcc-help

Where's the meaningless(?) code?

> On Thu, 2009-12-17 at 10:40 -0700, Joel Dice wrote:
> > On Thu, 17 Dec 2009, Bob Plantz wrote:
> > 
> > >
> > >
> > > I have seen many, many examples, both in industry and in academia,
where
> > > programmers write tricky code claiming it is more efficient. I
claim (a)
> > > efficiency is seldom an issue, and (b) looking at the generated
assembly
> > > language almost always shows it is not more efficient.
> > >
> > > I believe that the best code is that which (a) correctly solves the
> > > problem, and (b) is the most simple-minded in appearance.
> > 
> > Perhaps, but the code in question here is not merely obscure - it's
simply 
> > meaningless.  I think it's a mistake to put such code in the same
category 
> > as e.g. an affine transform implemented in inline assembly which has 
> > well-defined meaning.  The latter may pose a challenge for a
maintenance 
> > programmer, but at least it will yield to persistence.  In contrast, 
> > undefined code is no better than a "todo" comment - you're only
option is 
> > to replace it completely with something well-defined based on the 
> > documentation and/or context.
> > 
> 
> I agree that there are situations where obscure code is the best,
> perhaps the only, way to solve the problem. For example, in 1984 I had a
> consulting job where one of my assignments was to write a logarithm
> function for an embedded MC68000 environment. The only way I could get
> the required speed and accuracy was to use double-precision integer
> arithmetic. I wrote it in assembly language and used several "magic
> numbers" to keep intermediate values in range while maximizing
> arithmetic significance. My comments took more space in the listing than
> the actual code. To their credit, the programming team asked for even
> more documentation during my walk-through of my code.
> 
> These situations are uncommon -- and lots of fun to solve!
> 
> The most common uses of obscure code that I've seen are programmers
> showing off their "understanding" of the language being used. I believe
> that a good programmer does not ask what his/her code does, but rather
> explains it -- either through simple, easy-to-read code, or with
> thorough commenting. I use the term "good" to mean relative to the
> programmer's skill level.
> 
> --Bob
> 
> 
> 

________________________________________________________________
Please visit a saintly hero:
http://www.jakemoore.org

^ permalink raw reply	[flat|nested] 11+ messages in thread
* Re: Could you please explain this code segment
@ 2009-12-17 22:02 Bill McEnaney
  2009-12-18  5:11 ` Joel Dice
  0 siblings, 1 reply; 11+ messages in thread
From: Bill McEnaney @ 2009-12-17 22:02 UTC (permalink / raw)
  To: Brian Budge, Bill McEnaney, Bob Plantz, Joel Dice,
	W.H. Kalpa Pathum, gcc-help


Maybe it's too meaningful, i.e., too ambiguous.  Were it literally
meaningless, would it be compilable and executable?

If multiple increment and decrement operators (++ --) are used in the
> same statement, it's undefined which ones happen first.  Therefore:
> 
> int a = 0;
> cout << a++ << a++ << endl;
> 
> could produce 0 1 or it could produce 1 0.  It would be very bad to
> rely on any specific compiler behavior as this would be extremely
> fragile code.  The only guarantee is that the variable is modified
> before or after the usage.
> 
> Because it's undefined what should happen, it could be considered
meaningless.
> 
>   Brian
> 
> On Thu, Dec 17, 2009 at 11:52 AM, Bill McEnaney <bill@rkirkpat.net> wrote:
> > Where's the meaningless(?) code?
> >
> >> On Thu, 2009-12-17 at 10:40 -0700, Joel Dice wrote:
> >> > On Thu, 17 Dec 2009, Bob Plantz wrote:
> >> >
> >> > >
> >> > >
> >> > > I have seen many, many examples, both in industry and in academia,
> > where
> >> > > programmers write tricky code claiming it is more efficient. I
> > claim (a)
> >> > > efficiency is seldom an issue, and (b) looking at the generated
> > assembly
> >> > > language almost always shows it is not more efficient.
> >> > >
> >> > > I believe that the best code is that which (a) correctly solves the
> >> > > problem, and (b) is the most simple-minded in appearance.
> >> >
> >> > Perhaps, but the code in question here is not merely obscure - it's
> > simply
> >> > meaningless.  I think it's a mistake to put such code in the same
> > category
> >> > as e.g. an affine transform implemented in inline assembly which has
> >> > well-defined meaning.  The latter may pose a challenge for a
> > maintenance
> >> > programmer, but at least it will yield to persistence.  In contrast,
> >> > undefined code is no better than a "todo" comment - you're only
> > option is
> >> > to replace it completely with something well-defined based on the
> >> > documentation and/or context.
> >> >
> >>
> >> I agree that there are situations where obscure code is the best,
> >> perhaps the only, way to solve the problem. For example, in 1984 I
had a
> >> consulting job where one of my assignments was to write a logarithm
> >> function for an embedded MC68000 environment. The only way I could get
> >> the required speed and accuracy was to use double-precision integer
> >> arithmetic. I wrote it in assembly language and used several "magic
> >> numbers" to keep intermediate values in range while maximizing
> >> arithmetic significance. My comments took more space in the listing
than
> >> the actual code. To their credit, the programming team asked for even
> >> more documentation during my walk-through of my code.
> >>
> >> These situations are uncommon -- and lots of fun to solve!
> >>
> >> The most common uses of obscure code that I've seen are programmers
> >> showing off their "understanding" of the language being used. I believe
> >> that a good programmer does not ask what his/her code does, but rather
> >> explains it -- either through simple, easy-to-read code, or with
> >> thorough commenting. I use the term "good" to mean relative to the
> >> programmer's skill level.
> >>
> >> --Bob
> >>
> >>
> >>
> >
> > ________________________________________________________________
> > Please visit a saintly hero:
> > http://www.jakemoore.org
> >
> 
> 

________________________________________________________________
Please visit a saintly hero:
http://www.jakemoore.org

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2009-12-17 22:02 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-12-17  8:22 Could you please explain this code segment W.H. Kalpa Pathum
2009-12-17  8:46 ` Ineiev
2009-12-17 12:20 ` John (Eljay) Love-Jensen
2009-12-17 17:04 ` Bob Plantz
2009-12-17 18:52   ` Joel Dice
2009-12-17 19:53     ` Bob Plantz
2009-12-17 20:11 Bill McEnaney
2009-12-17 20:22 ` Brian Budge
2009-12-17 20:28   ` Joel Dice
2009-12-17 22:02 Bill McEnaney
2009-12-18  5:11 ` Joel Dice

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).