[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

Re: [LI] j = ++i * ++i * ++i




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.