assigning to const int via pointer
Sriharsha
sriharsha.v@redpinesignals.com
Fri Dec 31 06:44:00 GMT 2004
Ian Lance Taylor wrote:
>Joe Steeve <joe_steeve@gmx.net> writes:
>
>
>
>>The following code assigns a value to a `const int` via a
>>pointer.,
>>
>>#include <stdio.h>
>>
>>int
>>main()
>>{
>> const int x=5;
>> int *ptr;
>> ptr = &x;
>> *ptr = 10;
>> printf("%d",x);
>>}
>>
>>The code gives `10` for the following compilation
>>
>> $gcc -o test test.c
>>
>>It gives `5` when using optimisations switches.,
>>
>> $gcc -o test -O2 test.c
>>
>>Feature or bug or any explanation for this?
>>
>>
>
>When you declare that the variable is const, you are declaring that
>the value does not change. When you do change it, you are using
>undefined behaviour. When the compiler sees undefined behaviour, it
>does not behave predictably.
>
>ISO C99 6.7.3: "If an attempt is made to modify an object defined with
>a const-qualified type through use of an lvalue with
>non-const-qualified type, the behavior is undefined."
>
>
I am a little confused. The rule says:
If an attempt is made to modify an object, defined with a
const-qualified type, through use of an lvalue with a
non-const-qualified type, the behavior is undefined.
Now, in the above, program, we are not trying to alter the value of the
variable x as follows:
x = 10;
But we are trying to alter the contents of a memory location, which
happens to be where the variable 'x' refers to, by using a pointer,
which is defined behaviour.
According to the rule, you cannot use the variable, declared as a
const-qualified type, on the left hand side (lvalue, or assigned-to
variable), but it does not say anything about the memory being modified.
Please correct me if I am wrong. Also, when you qualify the type of x to
be a volatile, then the behaviour is as expected. So, there must be some
other reason why the variable "int *ptr" is being discarded by
Optimization. Check out that without optimization, you are able to
change the contents. Also, I've tried this with a few other compilers
(without optimization) and they all change the contents.
Harsha
>Ian
>
>
>
--
*****************************
* Sriharsha Vedurmudi
* Software Engineer
*
* Redpine Signals Inc.
* Gate #395, Plot 87,88
* Sagar Society, Road #2,
* Banjara Hills,
* Hyderabad - 500 034
* www.redpinesignals.com
*
* +91-40-23559911 (Office)
* +91-98851-37338 (Mobile)
*****************************
More information about the Gcc-help
mailing list