http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56465



Chung-Ju Wu <jasonwucj at gmail dot com> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |jasonwucj at gmail dot com



--- Comment #3 from Chung-Ju Wu <jasonwucj at gmail dot com> 2013-02-28 
17:19:13 UTC ---

(In reply to comment #2)

> (In reply to comment #1)

> > >it is actual a constant.

> > 

> > I don't think it is a integer constant expression though as it contains a 
> > cast

> > from a pointer type to an integer type.

> 

> Well, it isn't a integer scalar, but still a constant.



To my understanding, it is not a constant.



For example, 



  int i;

  i = (int) ((int*)0 + 1);



Could you tell the value of i from C language point of view?



According to C99 6.5.6 Point 8, 

"When an expression that has integer type is added to or subtracted

 from a pointer, the result has the type of the pointer operand."



Hence, the result of "(int*)0 + 1" is a 'pointer to type T'.

So, no, you can't tell the value.

It depends on integer size of target machine.

Reply via email to