In an expression, an “IdentifierName” term can
be interpreted in many different ways if no operator provides
additional context. The compiler must check the identifier
against the following terms, in the order they appear in the list:
-
Built-in function
-
Local variable
(function scope)
-
Parameter variable
(function scope)
-
Member variable
(member function scope; only applies to member functions)
-
Member function
(member function scope; only applies to member functions)
-
Global variable
(global scope)
-
Global function
(global scope)
-
Invalid identifier
Invalid identifiers cause errors.
There are also conditional identifier interpretations, including the structure
member dereference operator ('.') and the pointer-to-structure
member dereference operator ('->'). These operators
expect the right-side expression to be a member
identifier. However, due to the possibility of prohibitive
complexity of the left-side expression, it is not
always apparent what structure type is used as a basis for the
member dereference.
What this means is that the left-side expression must be completely
evaluated before the dereference is allowed to occur. Only
then does the resulting expression assume proper L-value, integer/floating
point, and scalar/structure/pointer status.
See also: [Expression
characteristics] [Identifier interpretations]
[Built-in functions] [Special
load considerations]
[Additional rules for expressions] [Final
expression type result] [L-value status gain and
loss]
[Overly complex expressions] [Limitations
on pointer usage] [Structure member
dereference: bit scan blocks]
|