I can see practical use for a const volatile
qualified variable, like
const volatile uint64_t seconds_since_1970;
if an underlying hardware mechanism updates the value every second, but the variable is not writable in the (possibly embedded) hardware.
And since all three (four in C11) type qualifiers are considered independent, all combinations do seem to be allowed. But I'm at a loss imagining a real-life situation where a restrict volatile
qualified pointer would really make sense:
uint32_t * restrict volatile pointer_to_some_uint32;
[EDIT: To clarify: Both volatile
and restrict
apply to the pointer, not to the object pointed to!]
Is this a construct allowed by the language but useless by itself, or am I missing some application area where this can be valuable?
Without restrict, a non-volatile pointer could alias a volatile pointer. Thus, after every modification of an object through the volatile pointer, register-cached values of all potentially-pointer-referenced objects of the same type must be discarded.
With restrict, you can tell the compiler the volatile pointer will not alias, so that the overhead of volatile only applies to the object pointed to, and not all other objects of the same type that might be accessible via pointers.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With