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