PSkocik PSkocik - 4 years ago 106
C Question

Can I write to a const member of a non-const struct?

Is this code legal?:

#include <stdio.h>

typedef struct a_d{
int const x;
} a_d;

int a_d__ctor(a_d *X)
{
*(int*)&X->x = 42; //<-- legal or not?
return 0;
}

int main()
{
a_d a;
a_d__ctor(&a);
printf("a.x=%d\n", a.x);

}

Answer Source

Modyfing an object declared with const qualifier invokes undefined behavior.

According to the Standard (emphasis mine):

C11 6.7.3/6 Type qualifiers

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.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download