From: "Pramode.C.E" <iclabs@xxxxxxxx>
Reply-To: linux-india@xxxxxxxxxxxxxxxxxxxxx
To: linux-india@xxxxxxxxxxxxxxxxxxxxx
Subject: Re: [LI] j = ++i * ++i * ++i
Date: Tue, 18 Jan 2000 13:35:12 +0400 (SCT)
On Tue, 18 Jan 2000, Aseem Rane wrote:
>
> if i is initialized to say 3,
>
> what will be the value of j, where
>
> j = ++i * ++i * ++i;
>
> on solaris
> using cc answer is
> j = 6 * 6 * 6;
>
> useing gcc answer is
> j = 4 * 5 * 6;
>
>
> but on linux (RH6.1 PCQ)
>
> j = 5 * 5 * 6;
>
> can anybody explain logic behind j's value on linux???
>
Please refer C FAQ (i think questions 3.3,3.4 etc dealing
with sequence points). K&R pp 52, 53, 54 is also relevant.
Finally, you should try running some sort of lint on your
code. You might try LCLint which is available from
http://lclint.cs.virginia.edu/ftp/lclint/lclint-2.4b.src.tar.gz.
Here is what lclint tells me about the code above:
"Expression has undefined behaviour (left operand uses
i, modified by right operand): ++i * ++i.
Code has unspecified behaviour. Order of evaluation of
function parameters or subexpressions is not defined, so
if a value is used and modified in different places not
separated by a sequence point constraining evaluation
order, the result of the expression is unspecified."
bye,
pramode.
> bye
> aseem
>
>
>
> --------------------------------------------------------------------
> The Linux India Mailing List Archives are now available. Please search
> the archive at http://lists.linux-india.org/ before posting your
question
> to avoid repetition and save bandwidth.
>
--------------------------------------------------------------------
The Linux India Mailing List Archives are now available. Please search
the archive at http://lists.linux-india.org/ before posting your question
to avoid repetition and save bandwidth.