26.11 Qualifiers

ISO Standard: “What constitutes an access to an object that has volatile-qualified type (C90 6.5.3, C99 6.7.3).”
Implementation: Any expression which uses the value of or stores a value to a volatile object is considered an access to that object. There is no guarantee that such an access is atomic.

If an expression contains a reference to a volatile object but neither uses the value nor stores to the object, the expression is considered an access to the volatile object or not depending on the type of the object. If the object is of scalar type, an aggregate type with a single member of scalar type, or a union with members of (only) scalar type, the expression is considered an access to the volatile object. Otherwise, the expression is evaluated for its side effects but is not considered an access to the volatile object.

For example:
volatile int a;

a; /* access to ‘a’ since ‘a’ is scalar */